Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
11 сентября 2018 г. 9:14

Проблемы с статической компиляцией Qt с MySQL

c++, mysql, static, qt

Здравствуйте! При статической компиляции 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. Выбрасывает такие-же ошибки (добавил скриншот). Как думаете в чем может быть проблема? Спасибо.

24

Добрый день!

По ходу объектные файлы MySQL имеют более старую версию компилятора, чем та, с которой вы компилируете. Поиграйтесь с версиями компиляторов

Для Django рекомендую VDS-хостинг TIMEWEB

0

Вы думаете что нужно пробовать использовать старые версии Visual Studio или как понять - версии компиляторов? Спасибо.

0

Ага. Попробуйте собрать проект с более ранним компилятором.

Тут или саму либу MySQL пересобирать новым компилятором нужно, если есть исходники, либо для всего вашего проекта использовать более старый компилятор.

Также ещё в настройках Visual Studio можете попробовать переключиться на более старй Toolset

Properties > Config. Properties > General > Platform Toolset


Для Django рекомендую VDS-хостинг TIMEWEB

0

Хорошо. Буду пробовать. Спасибо.

1

Пробовал с 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


0

А какая там одна ошибка на VS2012?

Для Django рекомендую VDS-хостинг TIMEWEB

0

Здравствуйте! Это уже не важно. Я перекомпелировал 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) ?

Спасибо.


0

Насчет проблемы Release, MySQL нужно чтобы OpenSSL был статически но с /MD также. Вот только где найти такую библиотеку или как ее так собрать? Спасибо.

0

Нашел исходный код и скомпилировал библиотеку OpenSSL статически с /MD. Но проблема осталась: Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMD.lib(ssl.obj)

Я думаю, может мне не нужно OpenSSL, может он уже встроен в MySQL стат. библиотеку и будет работать и там и там. То есть когда будет подключение к сайту - https и БД сервера на Qt. А вы как думаете? Спасибо.


0

А нет, OpenSSL также нужно. Без нее не будет работать. Значит проблема в чем-то другом. Буду искать.

0

Попробуйте также поискать информацию по запросу precompiled library openssl, возможно, что вам удастся найти уже предкомпилированные библиотеки. Мне как-то попадался один сайт, на котором была большая коллекция предкомпилированных библиотек

Для Django рекомендую VDS-хостинг TIMEWEB

0

Да, дело скорее в MySQL бибилиотеке, возможно ее нужно компилировать с указанием на OpenSSL, та которая будет использована дальше в Qt конфигурации. Нет смысла что-то пробовать с /MT /MD так как пробовал и то и другое, а результат эта ошибка:

Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMT.lib(ssl.obj)
Получается что если 2 эти бибилиотеки (MySQL & OpenSSL) статически собраны и подключены тогда эта ошибка выходит не зависимо от /MT /MD. Если заменить одну из них на динамическую тогда все работает. Но мне нужно чтобы они были 2 статические.




0

Создал улучшенный batch файл и теперь проблема с MYSQL_LIBS_DEBUG/MYSQL_LIBS_RELEASE исправлена (компилирует отдельно Debug/Release). Осталось еще исправить: Error LNK2005 _ERR_remove_thread_state already defined in mysqlclientMT.lib(ssl.obj)

0

Могу ошибаться, но возможно эта ошибка говорит о несовместимости  mysqlclient с вашей версией mysql.

Для более новых версий mysql нужно использовать другой драйвер, а именно mysql-connector

Для Django рекомендую VDS-хостинг TIMEWEB

0

Здравствуйте! Я тоже думал о несовместимости 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 такой тестовый проект:


#include <iostream>
#include <mysql.h>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
using namespace std;

int main()
{
	cout << "Hello World!" << endl;
	cout << "Hello!" << endl;
	SSL_load_error_strings();
	ERR_load_BIO_strings();
	OpenSSL_add_all_algorithms();
	printf("MySQL client version: %s\n", mysql_get_client_info());
	system("PAUSE");
	return 0;
}

https://ddgobkiprc33d.cloudfront.net/fb6fa934-5843-436e-a917-126c04f76a3f.png

Так как видите проблем нет и прога работает. Но когда компилирую с Qt статически эти библиотеки (MySQL & OpenSSL), он определяет эти бибилиотеки при конфигурации, а дальше ошибка:

https://ddgobkiprc33d.cloudfront.net/9388cd83-2ff8-4ab9-bb05-00c468a05ec1.png

Даже не знаю уже в чем может быть проблема. Как думаете в чем еще может быть проблема? Спасибо.




0

Я думаю что Qt несовместим с OpenSSL библиотеками:

  1. libcrypto.lib
  2. libssl.lib



0

Я думаю что Qt несовместим с OpenSSL библиотеками:

  1. libcrypto.lib
  2. libssl.lib

Возможно нужно искать другое решение этой проблемы.



0

Вообще в том, что не все библиотеки OpenSSL совместимы с Qt, вы правы. Завтра посмотрю, какую мы версию используем на работе. Но мы в качестве динамической библиотеки её используем.

Для Django рекомендую VDS-хостинг TIMEWEB

0

Хорошо. Спасибо. У меня тоже есть одна идея, но сначала проверю ее.

0

Да. Те версии, которые Вы использовали для сборки не работают с Qt. Я тоже не смог запустить те библиотеки, причём даже с динамической линковкой.

У нас используются немного другие версии библиотек, а именно:

  • libeay32 - File version 1.0.2 14, Product version 1.0.2n
  • ssleay32 - File version 1.0.2 14, Product version 1.0.2n
Попробуйте найти и скомпилировать версии этих библиотек.

Для Django рекомендую VDS-хостинг TIMEWEB

0

Да, вы правы. Моя идея в этом и заключалась чтобы скомпилировать другие бибилиотеки OpenSSL c MySQL, так как те несовместимы, но был один вопрос как

указать libcrypto так как MySQL требовал ее при сборке, а выходит что libeay32.lib библиотека соответствует libcrypto.lib.

x86 сборки уже собрал Qt статически. Проверил на x86 все работает через Qt и все подключается статически (OpenSSL & MySQL).

Компилирую Qt static x64. Тогда напишу решение этой проблемы.


1

Успеха Вам. Могу вас попросить, черкануть небольшой мануал в виде статьи? Когда успешно закончите сборку?

Для Django рекомендую VDS-хостинг TIMEWEB

0
  • Ответ был помечен как решение.
  • 17 сентября 2018 г. 10:55

Так вот, как я решил эту проблему:


Я собрал статические OpenSSL libs: 1.0.2l и MySQL: 5.7.23 статические библиотеки с заранее созданными библиотеками OpenSSL, указал параметр:


-DCRYPTO_LIBRARY =" путь к lib \ libeay32MD.lib" в cmake, потому что libeay32 соответствует libcrypto.


Я переконфигурировал `Qt` статически с этими статическими библиотеками. Теперь он работает для x86 и x64, и эти библиотеки встроены в исполняемый файл. Проблема решена.

Насчет статьи, спасибо Вам за предложение, но я все делал по документации OpenSSL, MySQL & Qt и считаю что любой кто будет использовать данные документации сможет это сделать.

Спасибо Вам за помощь.

1

Ну если, то да. Тогда просто буду давать ссылку на этот топик, если будут возникать подобные вопросы.

Спасибо за ответ.

Для Django рекомендую VDS-хостинг TIMEWEB

0

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
18 ноября 2018 г. 19:19
cyrillwork

Qt - Тест 001. Сигналы и слоты

  • Результат:78баллов,
  • Очки рейтинга2
16 ноября 2018 г. 19:09
Илья Завьялов

Qt - Тест 001. Сигналы и слоты

  • Результат:31баллов,
  • Очки рейтинга-10
16 ноября 2018 г. 12:49
Ирина Минигузина

C++ - Тест 003. Условия и циклы

  • Результат:0баллов,
  • Очки рейтинга-10
Последние комментарии
16 ноября 2018 г. 6:50
Евгений Легоцкой

Добрый день! шаблон не находит, или шаблон неправильно прописали, или тег шаблона неправильно написан, иных выводов сделать не могу, из того, что вы написали. трейсбек нужно смотреть. Со...
16 ноября 2018 г. 6:48
Евгений Легоцкой

пройтись циклом по всем виджетам в обратном порядке for (int i = ui->vertialLayout->count() - 1; i >= 0; --i){ QWidget* w = ui->verticalLyout->itemAt(i)->widget();...
15 ноября 2018 г. 21:35
chunk

Доброго времени суток Евгений. Не подскажете что я делаю не так? Получаю ошибку такого характера: Reverse for 'add_comment' with arguments '('',)' not found. 1 pattern(s) tried: ...
15 ноября 2018 г. 15:35
Михаиллл

Спасибо. Похоже где то описку сделал, поэтому не работало. Я добавил на verticalLayout много виджитов. А можно ли их как то быстро и просто удалить?
15 ноября 2018 г. 14:55
Евгений Легоцкой

verticalLayout - это, по-моему предположению, должен быть у вас объект класса QVBoxLayout, который наследован от QBoxLayout. Поэтому открываете документацию на QVBoxLayout ...
Сейчас обсуждают на форуме
18 ноября 2018 г. 18:11
Metelev

Большое спасибо, все получилось, завтра начну изучать код.
18 ноября 2018 г. 17:49
Чарльз Грин

Спасибо, буду разбераться
17 ноября 2018 г. 14:13
Чарльз Грин

Я сейчас занимаюсь мультимедией, это аудио и видео, программы для концертов и т. д. Бибилиотека Qt очень помогает, она надежная, а надежность в моих приложениях очень важный фактор чтоб не пол...
16 ноября 2018 г. 16:28
Евгений Легоцкой

Добрый день! Спасибо, что воспользовались именно форумом. Заниматься курсовыми работами чьими-то ни было у меня времени нет, у самого полторы работы. Но что-то подсказать на фо...
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы