我要問這個問題,然後自己回答。 我知道這是一個新手問題,但是因爲它花了我大約。兩天找到正確的答案,我會發布它。Visual Studio C++鏈接器警告:LNK4006與C運行時(CRT)
這麼多的免責條款 - 這一次是專門給你所有新手在那裏:
我必須繼續MFC項目在VS 2010中,我需要補充一些第三方靜態庫。一切進展順利,編譯了這兩個項目,並且我的項目成功引用了該庫。然後,當我在我的項目中包含庫中的一些頭文件時,我收到了大量鏈接器警告,其中包含有關C運行時庫中的函數的信息,例如:
警告9警告LNK4006:_sprintf已在libcmtd中定義。 LIB(sprintf.obj);第二個定義被忽略C:路徑\爲\我的\項目\ MSVCRTD.LIB(MSVCR100D.dll)
思考「什麼是地獄」,我試圖運行我的項目,才運行,直到它遇到了一個碼嘗試使用'fostream'寫入某個文件的行,然後崩潰,出現一些可怕的堆損壞異常。
搜索SO,我遇到了一些相關的問題,其中沒有一個完全符合我的問題:
- Link libraries with dependencies in Visual C++ without getting LNK4006
- How do you build a debug .exe (MSVCRTD.lib) against a release built lib (MSVCRT.lib)?
我幾乎包裹外部庫在DLL中,前我偶然發現了答案。