C
Cobra9115111 сентября 2018 г. 5: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. Выбрасывает такие-же ошибки (добавил скриншот). Как думаете в чем может быть проблема? Спасибо.

0e65a79d-b1fa-4635-946b-47ced35bbb40.png
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

24
Evgenii Legotckoi
  • 11 сентября 2018 г. 5:21
  • (ред.)

Добрый день!

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

    C
    • 11 сентября 2018 г. 5:32
    • (ред.)

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

      Evgenii Legotckoi
      • 11 сентября 2018 г. 5:35

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

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

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

      Properties > Config. Properties > General > Platform Toolset


        C
        • 11 сентября 2018 г. 6:01

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

          C
          • 11 сентября 2018 г. 11:53
          • (ред.)

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


            Evgenii Legotckoi
            • 12 сентября 2018 г. 3:10

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

              C
              • 12 сентября 2018 г. 6:38
              • (ред.)

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

              Спасибо.


                C
                • 12 сентября 2018 г. 11:07

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

                  C
                  • 12 сентября 2018 г. 14:01

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

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


                    C
                    • 12 сентября 2018 г. 15:05

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

                      Evgenii Legotckoi
                      • 12 сентября 2018 г. 15:31

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

                        C
                        • 12 сентября 2018 г. 15:45
                        • (ред.)

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

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




                          C
                          • 13 сентября 2018 г. 17:23
                          • (ред.)

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

                            Evgenii Legotckoi
                            • 15 сентября 2018 г. 6:33

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

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

                              C
                              • 16 сентября 2018 г. 6:15
                              • (ред.)

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

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




                                C
                                • 16 сентября 2018 г. 6:55

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

                                1. libcrypto.lib
                                2. libssl.lib



                                  C
                                  • 16 сентября 2018 г. 6:55
                                  • (ред.)

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

                                  1. libcrypto.lib
                                  2. libssl.lib

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



                                    Evgenii Legotckoi
                                    • 16 сентября 2018 г. 8:11

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

                                      C
                                      • 16 сентября 2018 г. 8:21

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

                                        Evgenii Legotckoi
                                        • 17 сентября 2018 г. 2:54
                                        • (ред.)

                                        Да. Те версии, которые Вы использовали для сборки не работают с 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
                                        Попробуйте найти и скомпилировать версии этих библиотек.

                                          C
                                          • 17 сентября 2018 г. 4:06

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

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

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

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


                                            Evgenii Legotckoi
                                            • 17 сентября 2018 г. 4:14

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

                                              C
                                              • 17 сентября 2018 г. 6: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 и считаю что любой кто будет использовать данные документации сможет это сделать.

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

                                                Evgenii Legotckoi
                                                • 17 сентября 2018 г. 7:08

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

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

                                                  Комментарии

                                                  Только авторизованные пользователи могут публиковать комментарии.
                                                  Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                                  e
                                                  • ehot
                                                  • 31 марта 2024 г. 21:29

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

                                                  • Результат:78баллов,
                                                  • Очки рейтинга2
                                                  B

                                                  C++ - Тест 002. Константы

                                                  • Результат:16баллов,
                                                  • Очки рейтинга-10
                                                  B

                                                  C++ - Тест 001. Первая программа и типы данных

                                                  • Результат:46баллов,
                                                  • Очки рейтинга-6
                                                  Последние комментарии
                                                  k
                                                  kmssr9 февраля 2024 г. 2:43
                                                  Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                                  АК
                                                  Анатолий Кононенко5 февраля 2024 г. 9:50
                                                  Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                                  EVA
                                                  EVA25 декабря 2023 г. 18:30
                                                  Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                                                  J
                                                  JonnyJo25 декабря 2023 г. 16:38
                                                  Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                                                  G
                                                  Gvozdik19 декабря 2023 г. 5:01
                                                  Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                                                  Сейчас обсуждают на форуме
                                                  a
                                                  a_vlasov14 апреля 2024 г. 13:41
                                                  Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                                                  Павел Дорофеев
                                                  Павел Дорофеев14 апреля 2024 г. 9:35
                                                  QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                                                  f
                                                  fastrex4 апреля 2024 г. 11:47
                                                  Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
                                                  P
                                                  Pisych27 февраля 2023 г. 12:04
                                                  Как получить в массив значения из связанной модели? Спасибо, разобрался:))
                                                  AC
                                                  Alexandru Codreanu19 января 2024 г. 19:57
                                                  QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

                                                  Следите за нами в социальных сетях