链接MySQL C连接器?

时间:2014-02-13 09:36:42

标签: c++ mysql c visual-studio visual-studio-2012

我正在使用 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连接器,则不会发生崩溃!

1 个答案:

答案 0 :(得分:0)

随机崩溃很可能与多线程使用 MySQL 客户端库有关。试试这个

mysql_library_init(0, nullptr, nullptr);
在产生任何线程之前

此处,来自 MySQL 文档的更具体信息:

  

在非多线程环境中,调用mysql_library_init()   可以省略,因为mysql_init()会自动调用它   必要。 但是,mysql_library_init()在a中不是线程安全的   多线程环境,因此也不是mysql_init(),哪个   调用mysql_library_init()。你必须调用mysql_library_init()   在产生任何线程之前,或者使用互斥锁来保护线程   调用,无论是调用mysql_library_init()还是间接调用   mysql_init()。在任何其他客户端库调用之前执行此操作。