我正在使用Visual Studio 2012,x64发布模式,多线程运行时库编写C ++程序。我的项目还包含链接的boost 1.55.0库。
我试图以某种方式获得MySQL C连接器(C ++连接器编写不当,所以我决定使用C)工作。它可以工作,但是我遇到了随机崩溃,并且在四处搜寻之后,我相信MySQL C连接器未正确链接。
我试过的
a)我下载了用于Windows的二进制x64,并包含在库目录中:mysql-connector-c-6.1.3-winx64\lib\vs11
。我还添加了其他依赖项mysqlclient.lib
b)我下载了源代码,并使用以下代码对其进行了编译:
cd C:\Users\Luka\Documents\mysql-connector-c-6.1.3-src
set MYSQL_DIR=C:\Users\Luka\Documents\mysql-connector-c-6.1.3-src
"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -G "Visual Studio 11 Win64" ^
-DBOOST_ROOT:STRING=C:\Users\Luka\Documents\boost_1_55_0\boost ^
-DMYSQL_LIB_DIR:STRING=C:\Users\Luka\Documents\mysql-connector-c-6.1.3-src\lib
devenv.com MySQLCPPCONN.sln /build Release
我真的很拼命,以上都不解决随机崩溃的问题,但是如果我从项目中删除C连接器,崩溃就不会发生!
最佳答案
随机崩溃很可能与MySQL客户端库的多线程使用有关。尝试这个
mysql_library_init(0, nullptr, nullptr);
在生成任何线程之前。
在这里,来自MySQL文档的更多具体信息:
在非多线程环境中,对mysql_library_init()的调用
可以省略,因为mysql_init()会自动将其调用为
必要。但是,mysql_library_init()在
多线程环境,因此也不是mysql_init(),
调用mysql_library_init()。您必须调用mysql_library_init()
在生成任何线程之前,否则使用互斥体来保护线程
调用,无论是调用mysql_library_init()还是通过间接调用
mysql_init()。在进行任何其他客户端库调用之前,请执行此操作。
关于c++ - 链接MySQL C连接器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21750242/