Russian Qt Forum
Апрель 29, 2017, 08:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Статическая сборка Qt 5.7.0 +mysql +openssl (MSVC 2015 x64)  (Прочитано 174 раз)
votkayat
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« : Апрель 20, 2017, 17:47 »

Всем привет.
Пытаюсь собрать статически Qt 5.7.0. Компилятор использую от MS Visual Studio 2015.
Сперва собрал openssl 1.0.2k и mysql 5.7.

Параметры configure такие:
Код:
configure.bat -prefix C:\Qt\Qt5.7.0-static -opengl desktop -opensource -confirm-license -nomake examples -nomake tests -debug-and-release -static -static-runtime -no-qml-debug -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -openssl-linked -I C:\lib\openssl\1.0.2k-static64-debug\include -L C:\lib\openssl\1.0.2k-static64-debug\lib -l Gdi32 -l User32 OPENSSL_LIBS="-llibeay32 -lssleay32" -qt-sql-mysql -I C:\lib\mysql\include -L C:\lib\mysql\lib -l mysqlclient

Перед сборкой запускаю такой .cmd-файл (как сказано здесь):
Код:
CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
SET _ROOT=C:\Qt\qt-5
SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
SET QMAKESPEC=win32-msvc2015
SET _ROOT=

Несколько часов оно собирается (под виртуальной машиной), потом вываливается с вот такими ошибками:
Код:
mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp_putenv referenced in function win_init_registry
OLDNAMES.lib(putenv.obi) : error LNK2001: unresolved external symbol __imp_putenv
mysqlclient.lib(int2str.obj) : error LNK2019: unresolved external symbol __imp_ldiv referenced in function int2str
+++++++++++куча других : error LNK2019: unresolved external symbol __imp_[имя функции]
..\..\..\bin\assistant.exe : fatal error LNK1120: 18 unresolved externals

Я немного погуглил по этим самым unresolved external symbol, это, вроде как, функции микрософтовской библиотеки C++ (какие-то из них объявлены в stdlib.h, какие-то в string.h, все не искал). При этом, как .h файлы этой библиотеки присутствуют в переменной окружения %INCLUDE%, так и путь к .lib-файлам присутствует в переменной окружения %LIB%.

Прошу помощи в решении этой проблемы.
« Последнее редактирование: Апрель 24, 2017, 13:03 от votkayat » Записан
annulen
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« Ответ #1 : Апрель 22, 2017, 13:59 »

Мб -static-runtime поможет (статически линкует рантайм MSVC, потом не требуется vcredist)
Записан
votkayat
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #2 : Апрель 24, 2017, 12:59 »

В общем, разобрался путем изучения файла mysqlclient.lib. Оказалось, что при сборке по умолчанию (например, согласно этой статье), он собирается с ключем /MD, что не дает на выходе статическую библиотеку (по крайней мере, в моем ее понимании -- в тонкостях терминов я не силен).

Пересобрал mysql-5.7 с вот такими параметрами:
Код:
cmake .. -G "Visual Studio 14 2015 Win64" -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=C:\lib\boost -DCMAKE_C_FLAGS_RELWITHDEBINFO="/MT /O2 /Ob1" -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="/MT /O2 /Ob1"

После чего уже сам qt-5.7 нормально собрался. Так что проблема была в коряво собранном MySQL.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.048 секунд. Запросов: 22.