Russian Qt Forum
Март 28, 2024, 14:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено:] Статическая сборка Qt 5.7 дебаг и релиз с MySQL (ViSual Studio)  (Прочитано 3822 раз)
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« : Сентябрь 30, 2016, 19:03 »

Добрый день!

Цель: сделать статическую сборку Qt, чтобы ее можно было использовать на других машинах без дополнительной установки MySQL и OpenSSL.
Причина такого радикализма имеется. Есть ПК под управлением Windows XP с установленным MySQl-ODBC Connector 3.5. MySQL клиент, сервер и коннектор 5х версий сегфолятся. Поэтому любое приложение с libmysql не работает. В лучшем случае драйвер просто не загружается. Решения два: удалить старый драйвер, но тогда перестанут работать программы которые его используют; использовать либу mysqlclient.

Подготовил среду для сборки.
Собрал статически релизную и дебажную версию OpenSSL, релизную и дебажную версию MySQL текущей версией Visual Studio OpenSSL.
Исправил файл mkspec для Студии для статической сборки.
Выполняю конфигурацию
Код
DOS
.\configure.bat -static -debug-and-release -platform win32-msvc2015 -c++std c++11 -prefix "E:\Qt\msvc2015_static" -opensource -confirm-license -make examples -make tests -make tools -qml-debug -opengl desktop -make libs -qt-pcre -qt-libpng  -qt-libjpeg -qt-zlib -qt-freetype -qt-sql-sqlite -qt-sql-odbc -qt-sql-mysql -openssl -openssl-linked OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_RELEASE="-lssleay32S -llibeay32S" OPENSSL_LIBS_DEBUG="-lssleay32SD -llibeay32SD" -I "c:\MySQL32\mysql-5.7.14\include" -I "e:\OpenSSL_x32\include" -L "d:\MySQL\lib" -L "e:\OpenSSL_x32\lib" -L "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -l mysqlclient
Но nmake вылетает с ошибкой LNK2019 при попытке слинковать дебаг-версию Qt с mysqlclient.lib (релиз). Ожидается значение уровня дебага 2, а в либе стоит 0.
Если заменить mysqlclient.lib дебажной версией, то ошибка повторяется только уже на этапе сборки релизной части тулкита. Ожидается значение 0, а в либе не 0.

Как сконфигурировать так, чтобы при сборке релизной версии Qt бралась mysqlclient.lib релизная, а при сборке дебажной версии Qt - mysqlclient.lib дебажная?
Заранее благодарю.
« Последнее редактирование: Октябрь 17, 2016, 11:25 от ЙадоФитый ПлюсЧ » Записан
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #1 : Октябрь 17, 2016, 11:24 »

Пересобрал Visual Studio 2015
Shared x86
Код
DOS
..\..\Src\Shared\x86\Src\configure.bat -shared -debug-and-release -platform win32-msvc2015 -c++std c++11 -prefix "..\..\..\..\..\Qt\5.7\msvc2015_shared" -opensource -confirm-license -nomake examples -nomake tests -make tools -qml-debug -opengl dynamic -system-proxies -make libs -qt-pcre -qt-libpng -qt-libjpeg -qt-zlib -qt-freetype -plugin-sql-sqlite -plugin-sql-odbc -plugin-sql-mysql -openssl OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_RELEASE="-llibeay32MD -lssleay32MD" OPENSSL_LIBS_DEBUG="-llibeay32MDd -lssleay32MDd" -l libmysql -I "c:\Lib\include\mysql" -I "c:\Lib\include\openssl" -L "c:\Lib\Lib32_VS2015\MySQL" -L "c:\Lib\Lib32_VS2015\OpenSSL" -L "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib"
Shared x64
Код
DOS
..\..\Src\Shared\x64\Src\configure.bat -shared -debug-and-release -platform win32-msvc2015 -c++std c++11 -prefix "..\..\..\..\..\Qt\5.7\msvc2015_x64_shared" -opensource -confirm-license -nomake examples -nomake tests -make tools -qml-debug -opengl dynamic -system-proxies -make libs -qt-pcre -qt-libpng -qt-libjpeg -qt-zlib -qt-freetype -plugin-sql-sqlite -plugin-sql-odbc -plugin-sql-mysql -openssl OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_RELEASE="-llibeay32MD -lssleay32MD" OPENSSL_LIBS_DEBUG="-llibeay32MDd -lssleay32MDd" -l libmysql -I "c:\Lib\include\mysql" -I "c:\Lib\include\openssl" -L "c:\Lib\Lib64_VS2015\MySQL" -L "c:\Lib\Lib64_VS2015\OpenSSL" -L "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64"
После сборки и установки во всех файлах $Qt_Profile\lib\*d.prl заменил libmysql на libmysqld
Где libmysqld - дебаг версия библиотеки mysqlclient (Не путать с библиотекой libmysqld.lib, которая появляется при сборке MySQL)
Исправил в файле Qt\Src\qtbase\mkspecs\common\msvc-desktop.conf
Код:
QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
на
Код:
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
Static x86
Код
DOS
..\..\Src\Static\x86\Src\configure.bat -static -debug-and-release -platform win32-msvc2015 -c++std c++11 -prefix "..\..\..\..\..\Qt\5.7\msvc2015_static" -opensource -confirm-license -nomake examples -nomake tests -make tools -qml-debug -opengl dynamic -system-proxies -make libs -qt-pcre -qt-libpng -qt-libjpeg -qt-zlib -qt-freetype -qt-sql-sqlite -qt-sql-odbc -qt-sql-mysql -openssl -openssl-linked OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_RELEASE="-llibeay32MT -lssleay32MT" OPENSSL_LIBS_DEBUG="-llibeay32MTd -lssleay32MTd" -l mysqlclient -I "c:\Lib\include\mysql" -I "c:\Lib\include\openssl" -L "c:\Lib\Lib32_VS2015\MySQL" -L "c:\Lib\Lib32_VS2015\OpenSSL" -L "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib"
Static x64
Код
DOS
..\..\Src\Static\x64\Src\configure.bat -static -debug-and-release -platform win32-msvc2015 -c++std c++11 -prefix "..\..\..\..\..\Qt\5.7\msvc2015_x64_static" -opensource -confirm-license -nomake examples -nomake tests -make tools -qml-debug -opengl dynamic -system-proxies -make libs -qt-pcre -qt-libpng -qt-libjpeg -qt-zlib -qt-freetype -qt-sql-sqlite -qt-sql-odbc -qt-sql-mysql -openssl -openssl-linked OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_RELEASE="-llibeay32MT -lssleay32MT" OPENSSL_LIBS_DEBUG="-llibeay32MTd -lssleay32MTd" -l mysqlclient -I "c:\Lib\include\mysql" -I "c:\Lib\include\openssl" -L "c:\Lib\Lib64_VS2015\MySQL" -L "c:\Lib\Lib64_VS2015\OpenSSL" -L "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64"
После сборки и установки во всех файлах $Qt_Profile\lib\*d.prl заменил mysqlclient на mysqlclientd
Где mysqlclientd - дебаг версия библиотеки mysqlclient
« Последнее редактирование: Октябрь 17, 2016, 11:28 от ЙадоФитый ПлюсЧ » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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