libcmt.lib和msvcrt.lib衝突,原因和解決方法

libcmt.lib是windows環境下vc提供的靜態運行時庫(多線程);msvcrt.lib是動態運行時庫。

原因

由於DLL(或EXE)工程設置的Runtime Library 和 它導入的其他(.lib)庫的Runtime Library不同。

比如: 下面爲Release版,其中Runtime Library和use of MFC 需要匹配(所以這兩個內容的設置是兩兩對應的)

類型 我的DLL工程 需要調用的lib庫的工程 結果
工程名 DShow_Graph Baseclasses ——
use of MFC Use MFC in a static Library Use MFC in a static Library ——
Runtime Library Multi_threaded(/MT) Multi_threaded(/MT) 不衝突
use of MFC Use MFC in a static Library Use MFC in a shared DLL ——
Runtime Library Multi_threaded(/MT) Multi_threaded DLL(/MTd) 衝突
use of MFC Use MFC in a shared DLL Use MFC in a static Library ——
Runtime Library Multi_threaded DLL(/MTd) Multi_threaded(/MT) 衝突
use of MFC Use MFC in a shared DLL Use MFC in a shared DLL ——
Runtime Library Multi_threaded DLL(/MTd) Multi_threaded DLL(/MTd) 不衝突

如果是Debug版本,只需要將上面的設置改爲debug下的對應設置後,對應起來理解就可以了


解決方法

  • 把在編譯兩個工程時,把兩個運行庫都改爲統一的(都是(/MT)或都是(/MTd)),這樣就能順利編譯通過了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章