2012-02-05 89 views
0

默認情況下,Visual Studio編譯項目以使用Visual Threat運行時中的多線程DLL。我想用/ MT而不是/ MD來編譯我的程序。當然,大多數系統已經安裝了這個系統,並且它也可以重新分配。編譯沒有多線程DLL的程序(Visual C++ 2010)

當我改變/ MD到/ MT,我得到一個錯誤:

MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)

而且四五個類似的錯誤。 要嘗試解決此問題,我從默認庫中刪除了LIBCMT.LIB。

然後我得到的錯誤:

libcpmt.lib(_tolower.obj) : error LNK2019: unresolved external symbol __calloc_crt referenced in function __Getctype

從默認列表中刪除MSVCRTD.LIB導致類似的錯誤? 應該注意的是: - 這是一個OpenGL項目,使用glfw庫。 - 我使用lonesock的SOIL圖像庫進行紋理加載。

+1

什麼是您的構建設置?因爲MSVCRTD是MSVCRT的調試版本。 – Bart 2012-02-05 11:37:53

+1

可能的重複[解決LNK4098:defaultlib'MSVCRT'衝突](http://stackoverflow.com/questions/3007312/resolving-lnk4098-defaultlib-msvcrt-conflicts-with) – 2012-02-05 12:32:22

回答

3

沒有任何進一步的確切信息,我想說你的第一個問題是你在某種程度上混合了庫的發佈和調試版本。 MSVCRTD.lib是MSVCRT.lib的調試版本。

要麼你有一些調試設置掛在你自己的項目中,要麼就是鏈接到你正在使用的庫的調試版本。

永遠不要混用調試版本和發佈版本。如果幸運的話,你會得到這樣的錯誤。在一些罕見的情況下,所有魔法似乎都會奏效,直到沒有。