我正在使用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/

10-12 00:50