C
Cobra91151Қыр. 11, 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, 2:01 Т.Қ.

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

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


                    C
                    • Қыр. 12, 2018, 3:05 Т.Қ.

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

                      Evgenii Legotckoi
                      • Қыр. 12, 2018, 3:31 Т.Қ.

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

                        C
                        • Қыр. 12, 2018, 3: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, 5: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 Т.Ж.

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

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

                                                  Пікірлер

                                                  Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                                  Кіріңіз немесе Тіркеліңіз
                                                  Г

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

                                                  • Нәтиже:66ұпай,
                                                  • Бағалау ұпайлары-1
                                                  t

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

                                                  • Нәтиже:33ұпай,
                                                  • Бағалау ұпайлары-10
                                                  t

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

                                                  • Нәтиже:52ұпай,
                                                  • Бағалау ұпайлары-4
                                                  Соңғы пікірлер
                                                  G
                                                  GoattRockҚыр. 3, 2024, 11:50 Т.Қ.
                                                  Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                                                  d
                                                  dblas5Шілде 5, 2024, 9:02 Т.Қ.
                                                  QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                                  k
                                                  kmssrАқп. 9, 2024, 5:43 Т.Ж.
                                                  Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                                  АК
                                                  Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
                                                  Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                                  Енді форумда талқылаңыз
                                                  Evgenii Legotckoi
                                                  Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
                                                  добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                                  F
                                                  FynjyШілде 22, 2024, 2:15 Т.Қ.
                                                  при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                                                  BlinCT
                                                  BlinCTМаусым 25, 2024, 11 Т.Ж.
                                                  Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                                                  BlinCT
                                                  BlinCTМамыр 5, 2024, 3:46 Т.Қ.
                                                  Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                                                  Evgenii Legotckoi
                                                  Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
                                                  Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                                                  Бізді әлеуметтік желілерде бақылаңыз