Solved Qt static with MySQL issue
-
I would add
MYSQL_LIBS=-lmysqlclient
. -
Ok. I will try it and reply. Thanks.
-
I added the
MYSQL_LIBS="-lmysqlclient"
to configure: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%"
But I get the issue:
I think I should also provide the
libmysql
toMYSQL_LIBS
or the problem is withmysql-5.7.23
. -
I have found the issue! Adding this line
MYSQL_LIBS="-lmysqlclient"
to configure for some reason breaks the detection ofMySQL
. I will try again to confirm it. -
Yes, I was right. Adding
MYSQL_LIBS="-lmysqlclient"
breaks the detection ofMySQL
- 100% confirmed. -
I run a few tests and found that
Qt
requireslibmysql.lib
to configure, but since itdynamic
lib it won't work in my case. I think I should try to renamemysqlclient.lib
tolibmysql.lib
and test it. -
No, it fails with detection the
MySQL
iflibmysql.lib
has been changed, renamed or removed. -
I think I have found the issue.
This line of code in the file -
configure.json
-{ "libs": "-lmysqlclient", "condition": "!config.win32" }
disablesmysqlclient
(static) lib because condition states that!win32
, means notWindows
system. I will change it and try again. -
I have tried different solutions but it all failed.
The config.log:
+ 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.
Any ideas how to make it compile with the
static
library? Thanks. -
@SGaist said in Qt static with MySQL issue:
MT and MD are just related to the Windows runtime type you'll be using.
The issue must be with this. I checked
Qt
configure log and the same errors are displayed withMFC
static test project inVS 2017
.LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 1>mysqlclient.lib(xml.obj) : error LNK2001: unresolved external symbol __imp__sprintf 1>mysqlclient.lib(libmysql.obj) : error LNK2001: unresolved external symbol __imp__sprintf 1>mysqlclient.lib(my_time.obj) : error LNK2001: unresolved external symbol __imp__sprintf 1>mysqlclient.lib(client.obj) : error LNK2001: unresolved external symbol __imp__sprintf 1>mysqlclient.lib(ctype.obj) : error LNK2001: unresolved external symbol __imp__sprintf 1>mysqlclient.lib(my_error.obj) : error LNK2001: unresolved external symbol __imp__strcat_s 1>mysqlclient.lib(my_error.obj) : error LNK2001: unresolved external symbol __imp__strerror_s 1>mysqlclient.lib(my_init.obj) : error LNK2001: unresolved external symbol __imp__strdup 1>mysqlclient.lib(yassl_int.obj) : error LNK2001: unresolved external symbol __imp__strdup 1>OLDNAMES.lib(strdup.obi) : error LNK2001: unresolved external symbol __imp__strdup 1>mysqlclient.lib(my_default.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(log_client.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(my_init.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(my_winfile.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(my_mess.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __imp____iob_func 1>mysqlclient.lib(my_init.obj) : error LNK2001: unresolved external symbol __imp__putenv
It leads to
Qt
configure errors. For some reason it conflicts withMSVCRT
lib. -
I have run some tests on another PC, the same errors are present there. So, I think the
mysqlclient
is build for another compiler, maybe,MinGW
or olderVS
versions. I need to find theMySQL
source code and compilemysqlclient
(static) lib forVisual Studio 2017
. Any ideas where I can find it? Thanks. -
I have found the source code here: https://dev.mysql.com/downloads/mysql/
Now I will read docs how to compile it. -
I have built the
MySQL
libs, added to theMFC
test project and it displays the same errors. It's strange. Next, I will install virtual machine,VS 2015
and build the test project there. -
I have found the issue and built the
MySQL
libs. Then I reconfigureQt
, all built well but when I build my project I get the issue:So,
mysqlclient.lib
already has theOpenSSL
?Also, I have the issue with debugging the app:
I have the debug version of the library, but I want to know how to add it to the
configure
? I have tried:MYSQL_LIBS_DEBUG/MYSQL_LIBS_RELEASE
but it fails with detection ofMySQL
. Any ideas? Thanks. -
I have found that I must have the
OpenSSL
built statically as/MD
runtime lib in order to compile my project. The question is where to get such library or source code? Thanks in advance. -
I have fixed the issue with
MYSQL_LIBS_DEBUG/MYSQL_LIBS_RELEASE
libs by creating the advanced batch script file. So, it compiles thedebug/release
separately, has a support to removeQt
source dir and unpack the source from archive usingWinRaR
for the next compilation.By the way, I get issue when building static
Qt
in thedebug
mode:By pressing
Retry
it continues to buildQt
successfully.Still one more issue to fix:
-
So, I have fixed the issue:
Solution:
OpenSSL source code: 1.1.1
MySQL source code: 5.7.23- Compile static
OpenSSL
libs with/MDd
|/MD
flags forDebug
/Release
mode - Compile
MySQL
static libs (/MDd
|/MD
) with pre-compiledOpenSSL
static libs (option 1)
I test it in the simple console app in the
Visual Studio 2017
:Code:
#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; }
The result:
Now I configure Qt statically with these libs (
MySQL & OpenSSL
), first in theDebug
mode. It findMySQL
andOpenSSL
during configuration but then I get this issue:The question is how to fix this issue with
Qt
? Thanks in advance. - Compile static
-
This post is deleted! -
My issue is not solved because
Qt
for some reason doesn't build it. The question is why it can't build it properly now? -
I think that
Qt
is not compatible with the followingOpenSSL
libs:- libcrypto.lib
- libssl.lib