2014-02-13 116 views
0

我寫使用的Visual Studio 201264釋放模式多線程運行時庫一個C++程序。我的項目也包含鏈接的boost 1.55.0庫。鏈接MySQL C連接器?

我想以某種方式得到MySQL C連接器(C++連接器寫得不好,所以我決定使用C)工作。它的工作原理,但我遇到隨機崩潰,並經過搜索後,我相信MySQL C連接器沒有正確鏈接。

我的嘗試:

一)我donloaded二進制64位的Windows,我包括在庫目錄: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

隨機崩潰很可能與多線程使用MySQL客戶端庫有關。試試這個

mysql_library_init(0, nullptr, nullptr); 

在產卵任何線程之前。

這裏,從的MySQL文檔更具體的信息:

在nonmulti線程環境中,調用mysql_library_init() 可以被省略,因爲mysql_init()將自動調用它作爲必要 。 但是,mysql_library_init()在多線程環境中不是線程安全的,因此mysql_init()和mysql_init()都不會調用mysql_library_init()。無論是調用mysql_library_init()還是間接通過 mysql_init(),都必須在產生任何線程之前調用mysql_library_init() ,否則請使用互斥鎖來保護調用 。在任何其他客戶端庫調用之前執行此操作。

+0

很難相信,但我甚至沒有調用這個函數一次......我會添加它。另外,我不會從多個線程撥打電話 – Luka

+0

@Luka,我誤解了你的情況。以爲你使用的線程...我擔心調用這個函數不會幫你很多:(崩潰調試信息將有助於確定問題。 – GreenScape