我正在使用 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连接器,则不会发生崩溃!
答案 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()。在任何其他客户端库调用之前执行此操作。