2010-02-15 32 views
2

我有一個應用程序,我正在使用兩個第三方庫,每個都有預編譯的庫和dll,其中一個爲調試和發佈版本提供必要的.lib文件(A[d].lib),另一個只提供.lib發佈版本文件(B.lib)。如何在第三方庫不提供調試版本時調試應用程序?

在Release模式編譯(使用MSVC9)工作正常,但試圖在調試模式下編譯失敗,因爲第三方A需要LIBCMTD.lib(或MSVCRTD.lib),而第三方B需要LIBCMT.lib(或MSVCRT.lib)。

我可以解決這個問題還是我堅持調試在發佈模式?

回答

3

你想要完整的調試模式,還是隻想調試?如果後者是這種情況,只需轉到鏈接器選項,並打開符號信息(.pdb)的生成。這樣,您可以在自己的代碼中使用調試器,逐行瀏覽並查看變量。如果您因優化程序創建的控制流更改而感到惱火,則可以轉到編譯器選項並關閉優化。這樣你就可以使用調試器並在發佈模式下編譯。一旦您對代碼感到滿意,您只需將設置更改回創建優化代碼即可。

+1

實際上,我會從另一端開始:只取現有的調試配置,並鏈接到LIBCMT.lib,A.lib和B.lib。但重點是相同的:創建一個未優化的可執行文件,具有調試信息,但與發行版庫鏈接。 – MSalters 2010-02-16 10:35:05

+0

@Carsten:是的,我想完全調試,最後我選擇了你的和MSalters(+1!)方法。感謝您的建議! – Geoff 2010-02-18 16:47:41

1

嘗試將/NODEFAULTLIB:LIBCMT傳遞給鏈接器。

+0

隨着你提到的國旗,我反而得到'錯誤LNK2001:無法解析的外部符號__invalid_parameter_noinfo'(因爲'B'需要它)。 – Geoff 2010-02-15 21:20:24

+0

谷歌似乎在預處理器中使用'_SECURE_SCL = 0'命中以解決這個問題。 – 2010-02-15 21:30:02

+0

我嘗試過涉及_SECURE_SCL的其他解決方案的各種組合,無濟於事。 – Geoff 2010-02-18 16:44:39

1

我不確定它可以直接用靜態庫來完成。我建議你將庫B打包成動態庫,然後使用這個新的B庫。你的問題將會消失。

+0

一旦一切都被解決了,那肯定會成爲生產軟件的一個很好的解決方案,現在看起來太麻煩了,謝謝! – Geoff 2010-02-18 16:45:41

相關問題