當我需要在不同版本的MSVC中構建一些用於我的幾個項目中的第三方庫時,我通常會爲其每 MSVC版本和兩個調試版本配置。這就是推動力所在,而這正是我們在我們整個人生中爲我們所做的一切。如何在我的項目中正確構建用於調試和發佈配置的第三方庫?
但是,我仍然沒有得到,爲什麼我不能像建立這個庫...什麼。我需要的只是函數原型和目標代碼,對吧?由於我靜態鏈接CRT,我沒有外部依賴。但是當我試圖將MSVC8下的Release版本與我在MSVC10下調試的項目鏈接起來時,我有這個煩人的「已定義」鏈接器錯誤,我們都非常討厭這個錯誤。
但是爲什麼?我是否可以在lib中「封裝」所有這些函數,而不要將它們導出,以便我的項目僅從lib中獲取所需的內容?爲什麼我可以在每個項目中鏈接libpng和zlib的預編譯版本?是的,他們不是使用MSVC構建的,但我仍然使用CRT的相同功能。那麼任何人都可以請深入解釋一下,或者分享一些關於這個問題的一些開明解釋的鏈接嗎?
不錯的答案! 「...鏈接器稍後黏合CRT,當庫鏈接時...」 - 是否有強制鏈接器鏈接到.lib中的CRT函數的方法?我可以將自己的代碼鏈接到,爲什麼我不能強制CRT鏈接? – Mikhail 2012-03-15 16:38:00
這不是靜態.libs的工作方式。這是一個非常簡單的文件格式,只是一個.obj文件的集合。你強制鏈接器通過創建一個DLL鏈接CRT。 – 2012-03-15 16:55:09