Проблемы с статической компиляцией Qt с MySQL
Здравствуйте! При статической компиляции Qt с MySQL выбрасывает:
+ cd /d D:\QtBuild\Src\config.tests\mysql && D:\QtBuild\Src\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += static warn_off console single_arch" "QMAKE_LIBDIR += C:\\MySQL\\mysql-5.7.23-win32\\lib C:\\OpenSSL\\openssl-1.0.2l-vs2017\\lib" "INCLUDEPATH += C:\\MySQL\\mysql-5.7.23-win32\\include C:\\OpenSSL\\openssl-1.0.2l-vs2017\\include" "LIBS += -lmysqlclient" D:/QtBuild/Src/config.tests/mysql + cd /d D:\QtBuild\Src\config.tests\mysql && set MAKEFLAGS=& nmake > Microsoft (R) Program Maintenance Utility Version 14.15.26726.0 > Copyright (C) Microsoft Corporation. All rights reserved. > cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W0 -EHsc /Fdmysql.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -I. -IC:\MySQL\mysql-5.7.23-win32\include -IC:\OpenSSL\openssl-1.0.2l-vs2017\include -ID:\QtBuild\Src\qtbase\mkspecs\win32-msvc -Fo @C:\Users\cobra\AppData\Local\Temp\nmC064.tmp > main.cpp > link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:mysql.exe @C:\Users\cobra\AppData\Local\Temp\nmC2B7.tmp > LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library > mysqlclient.lib(xml.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(libmysql.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(my_time.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(client.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(ctype.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function _win32_have_tcpip > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegEnumValueA@32 referenced in function _win_init_registry > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegOpenKeyExA@20 referenced in function _win32_have_tcpip > mysqlclient.lib(my_default.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(log_client.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_init.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_winfile.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_mess.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_mess.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _my_message_stderr > mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __imp__fprintf > mysqlclient.lib(log_client.obj) : error LNK2001: unresolved external symbol __imp__fprintf > mysqlclient.lib(client_authentication.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPBDH@Z) referenced in function "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::_System_error_category::message(int)const " (?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z) > mysqlclient.lib(sha2_password_common.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPBDH@Z) > mysqlclient.lib(my_default.obj) : error LNK2019: unresolved external symbol __imp__printf referenced in function _my_load_defaults > mysqlclient.lib(ssl.obj) : error LNK2019: unresolved external symbol __imp___snprintf referenced in function _ya_SSL_ASN1_TIME_to_string > mysqlclient.lib(log_client.obj) : error LNK2019: unresolved external symbol __imp__vfprintf referenced in function "void __cdecl error_log_vprint(enum error_log_level::type,char const *,char *)" (?error_log_vprint@@YAXW4type@error_log_level@@PBDPAD@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__EqualSid@8 referenced in function "public: bool __thiscall Sid::operator==(class Sid const &)" (??8Sid@@QAE_NABV0@@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__GetTokenInformation@20 referenced in function "public: __thiscall Sid::Sid(void *)" (??0Sid@@QAE@PAX@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__IsValidSid@4 referenced in function "public: bool __thiscall Sid::is_valid(void)const " (?is_valid@Sid@@QBE_NXZ) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__LookupAccountNameW@28 referenced in function "public: __thiscall Sid::Sid(wchar_t const *)" (??0Sid@@QAE@PB_W@Z) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptAcquireContextA@20 referenced in function "public: __thiscall TaoCrypt::OS_Seed::OS_Seed(void)" (??0OS_Seed@TaoCrypt@@QAE@XZ) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptReleaseContext@8 referenced in function "public: __thiscall TaoCrypt::OS_Seed::~OS_Seed(void)" (??1OS_Seed@TaoCrypt@@QAE@XZ) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptGenRandom@12 referenced in function "public: void __thiscall TaoCrypt::OS_Seed::GenerateSeed(unsigned char *,unsigned int)" (?GenerateSeed@OS_Seed@TaoCrypt@@QAEXPAEI@Z) > mysql.exe : fatal error LNK1120: 17 unresolved externals > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\link.EXE"' : return code '0x460' > Stop. => source failed verification. Trying source 6 (type inline) of library mysql ... + cd /d D:\QtBuild\Src\config.tests\mysql && D:\QtBuild\Src\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += static warn_off console single_arch" "QMAKE_LIBDIR += C:\\MySQL\\mysql-5.7.23-win32\\lib C:\\OpenSSL\\openssl-1.0.2l-vs2017\\lib" "INCLUDEPATH += C:\\MySQL\\mysql-5.7.23-win32\\include C:\\OpenSSL\\openssl-1.0.2l-vs2017\\include" "LIBS += -lmysqlclient" D:/QtBuild/Src/config.tests/mysql + cd /d D:\QtBuild\Src\config.tests\mysql && set MAKEFLAGS=& nmake clean && set MAKEFLAGS=& nmake > Microsoft (R) Program Maintenance Utility Version 14.15.26726.0 > Copyright (C) Microsoft Corporation. All rights reserved. > del main.obj > del mysql.vc.pdb mysql.ilk mysql.idb > Microsoft (R) Program Maintenance Utility Version 14.15.26726.0 > Copyright (C) Microsoft Corporation. All rights reserved. > cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W0 -EHsc /Fdmysql.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -I. -IC:\MySQL\mysql-5.7.23-win32\include -IC:\OpenSSL\openssl-1.0.2l-vs2017\include -ID:\QtBuild\Src\qtbase\mkspecs\win32-msvc -Fo @C:\Users\cobra\AppData\Local\Temp\nmC3CF.tmp > main.cpp > link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:mysql.exe @C:\Users\cobra\AppData\Local\Temp\nmC632.tmp > LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library > mysqlclient.lib(xml.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(libmysql.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(my_time.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(client.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(ctype.obj) : error LNK2001: unresolved external symbol __imp__sprintf > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function _win32_have_tcpip > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegEnumValueA@32 referenced in function _win_init_registry > mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegOpenKeyExA@20 referenced in function _win32_have_tcpip > mysqlclient.lib(my_default.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(log_client.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_init.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_winfile.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_mess.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __imp____iob_func > mysqlclient.lib(my_mess.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _my_message_stderr > mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __imp__fprintf > mysqlclient.lib(log_client.obj) : error LNK2001: unresolved external symbol __imp__fprintf > mysqlclient.lib(client_authentication.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPBDH@Z) referenced in function "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::_System_error_category::message(int)const " (?message@_System_error_category@std@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@H@Z) > mysqlclient.lib(sha2_password_common.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPBDH@Z) > mysqlclient.lib(my_default.obj) : error LNK2019: unresolved external symbol __imp__printf referenced in function _my_load_defaults > mysqlclient.lib(ssl.obj) : error LNK2019: unresolved external symbol __imp___snprintf referenced in function _ya_SSL_ASN1_TIME_to_string > mysqlclient.lib(log_client.obj) : error LNK2019: unresolved external symbol __imp__vfprintf referenced in function "void __cdecl error_log_vprint(enum error_log_level::type,char const *,char *)" (?error_log_vprint@@YAXW4type@error_log_level@@PBDPAD@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__EqualSid@8 referenced in function "public: bool __thiscall Sid::operator==(class Sid const &)" (??8Sid@@QAE_NABV0@@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__GetTokenInformation@20 referenced in function "public: __thiscall Sid::Sid(void *)" (??0Sid@@QAE@PAX@Z) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__IsValidSid@4 referenced in function "public: bool __thiscall Sid::is_valid(void)const " (?is_valid@Sid@@QBE_NXZ) > mysqlclient.lib(common.obj) : error LNK2019: unresolved external symbol __imp__LookupAccountNameW@28 referenced in function "public: __thiscall Sid::Sid(wchar_t const *)" (??0Sid@@QAE@PB_W@Z) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptAcquireContextA@20 referenced in function "public: __thiscall TaoCrypt::OS_Seed::OS_Seed(void)" (??0OS_Seed@TaoCrypt@@QAE@XZ) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptReleaseContext@8 referenced in function "public: __thiscall TaoCrypt::OS_Seed::~OS_Seed(void)" (??1OS_Seed@TaoCrypt@@QAE@XZ) > mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptGenRandom@12 referenced in function "public: void __thiscall TaoCrypt::OS_Seed::GenerateSeed(unsigned char *,unsigned int)" (?GenerateSeed@OS_Seed@TaoCrypt@@QAEXPAEI@Z) > mysql.exe : fatal error LNK1120: 17 unresolved externals > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\link.EXE"' : return code '0x460' > Stop. => source failed verification. test config.sqldrivers.libraries.mysql FAILED looking for library oci Trying source 0 (type inline) of library oci ... + cd /d D:\QtBuild\Src\config.tests\oci && D:\QtBuild\Src\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += static warn_off console single_arch" "QMAKE_LIBDIR += C:\\MySQL\\mysql-5.7.23-win32\\lib C:\\OpenSSL\\openssl-1.0.2l-vs2017\\lib" "INCLUDEPATH += C:\\MySQL\\mysql-5.7.23-win32\\include C:\\OpenSSL\\openssl-1.0.2l-vs2017\\include" "LIBS += -loci" D:/QtBuild/Src/config.tests/oci + cd /d D:\QtBuild\Src\config.tests\oci && set MAKEFLAGS=& nmake > Microsoft (R) Program Maintenance Utility Version 14.15.26726.0 > Copyright (C) Microsoft Corporation. All rights reserved. > cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W0 -EHsc /Fdoci.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -I. -IC:\MySQL\mysql-5.7.23-win32\include -IC:\OpenSSL\openssl-1.0.2l-vs2017\include -ID:\QtBuild\Src\qtbase\mkspecs\win32-msvc -Fo @C:\Users\cobra\AppData\Local\Temp\nmC6EC.tmp > main.cpp > .\main.cpp(2): fatal error C1083: Cannot open include file: 'oci.h': No such file or directory > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\cl.EXE"' : return code '0x2' > Stop.
Использую Qt 5.9.6, MySQL 5.7.23, Visual Studio 2017. Компилирую под x86 архитектуру. Все работает если использовать динамическую библиотеку libmysql.lib, но если использовать статическу библиотеку mysqlclient.lib выбрасывает ошибки.
Я создал batch файл для конфигурации Qt:
SET /P qtBuildType=Qt build type (shared/static): SET /P qtBuildMySqlIncludePath=MySql include path: SET /P qtBuildMySqlLibPath=MySql lib path: SET /P qtBuildOpenSSLIncludePath=OpenSSL include path: SET /P qtBuildOpenSSLLibPath=OpenSSL lib path: SET /P qtBuildPath=Enter Qt build path: configure.bat -debug-and-release -%qtBuildType% -opensource -nomake tools -nomake examples -no-ltcg -sql-mysql -I "%qtBuildMySqlIncludePath%" -L "%qtBuildMySqlLibPath%" MYSQL_LIBS="-lmysqlclient" -ssl -openssl -openssl-linked -I "%qtBuildOpenSSLIncludePath%" -L "%qtBuildOpenSSLLibPath%" OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32 -lCrypt32" OPENSSL_LIBS_DEBUG="-lssleay32MTd -llibeay32MTd" OPENSSL_LIBS_RELEASE="-lssleay32MT -llibeay32MT" -prefix "%qtBuildPath%"
Я хочу чтобы эта бибилиотека была вшита в .exe файл. Также я пробовал создавать с ней статический MFC проект для теста в VS 2017. Выбрасывает такие-же ошибки (добавил скриншот). Как думаете в чем может быть проблема? Спасибо.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Akiv Doros
- 12 ноября 2024 г. 1:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
- molni99
- 26 октября 2024 г. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
- molni99
- 26 октября 2024 г. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Добрый день!
По ходу объектные файлы MySQL имеют более старую версию компилятора, чем та, с которой вы компилируете. Поиграйтесь с версиями компиляторов
Вы думаете что нужно пробовать использовать старые версии Visual Studio или как понять - версии компиляторов? Спасибо.
Ага. Попробуйте собрать проект с более ранним компилятором.
Тут или саму либу MySQL пересобирать новым компилятором нужно, если есть исходники, либо для всего вашего проекта использовать более старый компилятор.
Также ещё в настройках Visual Studio можете попробовать переключиться на более старй Toolset
Properties > Config. Properties > General > Platform Toolset
Хорошо. Буду пробовать. Спасибо.
Пробовал с 2010 по 2017 на вирт. машине Visual Studio. Там выбрасывает такие-же ошибки, на VS 2012 только 1 ошибка, но все-же, мне нужно под VS 2017. Есть исходники MySQL 5.7.23, скомпилировал эти библиотеки, такая-же проблема. Видимо что-то не так при компиляции. Возможно нужно еще что-то указывать. Проблема может быть во многих факторах:
1. Тип конфигурации был указан как утилита, а не статическая библиотека
2. Use Multi-Byte Character Set указан в Character Set, буду пробовать разные параметры и посмотрю что там указано в тестовом MFC проекте
3. Возможно что при компиляции этой бибилиотеки я указал только -DBUILD_SHARED_LIBS=OFF, а должно еще что-то быть что-бы указать что это статическая сборка. Вот нашел: -DLINK_STATIC_RUNTIME_LIBRARIES=1
А какая там одна ошибка на VS2012?
Здравствуйте! Это уже не важно. Я перекомпелировал MySQL с /MT и Qt статически. Теперь Qt пишет что хочет /MD, сделал с /MD. А вот теперь проблема при сборке проекта.
Если собирать в режиме - Debug:
https://ddgobkiprc33d.cloudfront.net/f3d19053-f1f3-4223-b0c3-68e8155bf461.png
Если в режиме Release:
https://ddgobkiprc33d.cloudfront.net/0a578732-1a9a-4aa9-bee8-11dc09d90621.png
Проблема Debug:
У меня есть версия бибилиотеки mysqlclient для Debug, ее при кофигурации Qt нужно указать.
Пробовал так: MYSQL_LIBS_DEBUG="-lmysqlclientMDd" MYSQL_LIBS_RELEASE="-lmysqlclientMD" но Qt при проверке не находит MySQL. Смотрел в .log, пишет что бибилиотека не найдена.
MYSQL_LIBS="-lmysqlclientMD -lAdvapi32 -lUser32" - так находит но только для релиза, если пробовать также указать для debug, то будет только для debug брать даже в режиме релиз. Нужно как-то указать для Debug и для Release при конфигурации Qt.
Проблема Release:
Выходит что в MySQL бибиотеке уже подключен OpenSSL?
Или как понять это: libeay32MT.lib(err.obj):-1: error: LNK2005: _ERR_remove_thread_state already defined in mysqlclientMD.lib(ssl.obj) ?
Спасибо.
Насчет проблемы Release, MySQL нужно чтобы OpenSSL был статически но с /MD также. Вот только где найти такую библиотеку или как ее так собрать? Спасибо.
Нашел исходный код и скомпилировал библиотеку OpenSSL статически с /MD. Но проблема осталась: Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMD.lib(ssl.obj)
Я думаю, может мне не нужно OpenSSL, может он уже встроен в MySQL стат. библиотеку и будет работать и там и там. То есть когда будет подключение к сайту - https и БД сервера на Qt. А вы как думаете? Спасибо.
А нет, OpenSSL также нужно. Без нее не будет работать. Значит проблема в чем-то другом. Буду искать.
Попробуйте также поискать информацию по запросу precompiled library openssl, возможно, что вам удастся найти уже предкомпилированные библиотеки. Мне как-то попадался один сайт, на котором была большая коллекция предкомпилированных библиотек
Да, дело скорее в MySQL бибилиотеке, возможно ее нужно компилировать с указанием на OpenSSL, та которая будет использована дальше в Qt конфигурации. Нет смысла что-то пробовать с /MT /MD так как пробовал и то и другое, а результат эта ошибка:
Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMT.lib(ssl.obj)
Получается что если 2 эти бибилиотеки (MySQL & OpenSSL) статически собраны и подключены тогда эта ошибка выходит не зависимо от /MT /MD. Если заменить одну из них на динамическую тогда все работает. Но мне нужно чтобы они были 2 статические.
Создал улучшенный batch файл и теперь проблема с MYSQL_LIBS_DEBUG/MYSQL_LIBS_RELEASE исправлена (компилирует отдельно Debug/Release). Осталось еще исправить: Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMT.lib(ssl.obj)
Могу ошибаться, но возможно эта ошибка говорит о несовместимости mysqlclient с вашей версией mysql.
Для более новых версий mysql нужно использовать другой драйвер, а именно mysql-connector
Здравствуйте! Я тоже думал о несовместимости mysqlclient с версией mysql. А здесь была несовместимость OpenSSL с MySQL. За mysql-connector я не знаю, там какие-то другие библиотеки, но я исправил эту проблему так:
OpenSSL исходники: 1.1.1
MySQL исходники: 5.7.23
1. Скомпелировал статическую OpenSSL c /MDd | /MD флагами для Debug/Release
2. Скомпелировал статическую MySQL c уже скомпелированой ранее OpenSSL
Создал в консольной проге Visual Studio 2017 такой тестовый проект:
https://ddgobkiprc33d.cloudfront.net/fb6fa934-5843-436e-a917-126c04f76a3f.png
Так как видите проблем нет и прога работает. Но когда компилирую с Qt статически эти библиотеки (MySQL & OpenSSL), он определяет эти бибилиотеки при конфигурации, а дальше ошибка:
https://ddgobkiprc33d.cloudfront.net/9388cd83-2ff8-4ab9-bb05-00c468a05ec1.png
Даже не знаю уже в чем может быть проблема. Как думаете в чем еще может быть проблема? Спасибо.
Я думаю что Qt несовместим с OpenSSL библиотеками:
Я думаю что Qt несовместим с OpenSSL библиотеками:
Вообще в том, что не все библиотеки OpenSSL совместимы с Qt, вы правы. Завтра посмотрю, какую мы версию используем на работе. Но мы в качестве динамической библиотеки её используем.
Хорошо. Спасибо. У меня тоже есть одна идея, но сначала проверю ее.
Да. Те версии, которые Вы использовали для сборки не работают с Qt. Я тоже не смог запустить те библиотеки, причём даже с динамической линковкой.
У нас используются немного другие версии библиотек, а именно:
Да, вы правы. Моя идея в этом и заключалась чтобы скомпилировать другие бибилиотеки OpenSSL c MySQL, так как те несовместимы, но был один вопрос как
указать libcrypto так как MySQL требовал ее при сборке, а выходит что libeay32.lib библиотека соответствует libcrypto.lib.
x86 сборки уже собрал Qt статически. Проверил на x86 все работает через Qt и все подключается статически (OpenSSL & MySQL).
Компилирую Qt static x64. Тогда напишу решение этой проблемы.
Успеха Вам. Могу вас попросить, черкануть небольшой мануал в виде статьи? Когда успешно закончите сборку?
Так вот, как я решил эту проблему:
Я собрал статические OpenSSL libs: 1.0.2l и MySQL: 5.7.23 статические библиотеки с заранее созданными библиотеками OpenSSL, указал параметр:
-DCRYPTO_LIBRARY =" путь к lib \ libeay32MD.lib" в cmake, потому что libeay32 соответствует libcrypto.
Я переконфигурировал `Qt` статически с этими статическими библиотеками. Теперь он работает для x86 и x64, и эти библиотеки встроены в исполняемый файл. Проблема решена.
Насчет статьи, спасибо Вам за предложение, но я все делал по документации OpenSSL, MySQL & Qt и считаю что любой кто будет использовать данные документации сможет это сделать.
Спасибо Вам за помощь.
Ну если, то да. Тогда просто буду давать ссылку на этот топик, если будут возникать подобные вопросы.
Спасибо за ответ.