對於在Linux和Windows上構建的跨平臺軟件項目,我們有不同的方式來處理第三方庫。在Linux上,我們使用CentOS/RHEL發行版發佈的版本進行構建和鏈接,這意味着我們與發佈版本鏈接,而在Windows上,我們維護自己的第三方庫「包」,在Windows上,我們構建了每個庫的兩個版本 - 鏈接msvcr100和msvcp100的發行版以及鏈接msvcr100d和msvcp100d的調試版。是/ nodefaultlib:msvcr100處理msvcr100.dll與msvcr100d.dll defaultlib問題的正確方法
我的問題只是在Windows上構建第三方依賴項的調試版本,還是在構建我們自己的軟件的調試版本時,我們可以簡單地使用/ nodefaultlib:msvcr100。
後續問題:我在哪裏可以瞭解到這方面的良好實踐。我已經閱讀了有關msvc運行時的MSDN頁面,但在建議方面幾乎沒有。
編輯:
讓我更簡潔地重述這個問題。使用VS2010時,使用/ nodefaultlib時出現問題:msvcr100在與使用/ MD編譯的庫鏈接時將可執行文件與/ MDd鏈接起來。
我的動機是避免必須構建我使用的第三方庫的發行版和調試版。另外我希望我的調試版本運行得更快。
從(使用運行時庫)文件爲/ MD,/ MT,/ LD:
MD:使你的應用程序使用運行的multithread-和具體的DLL版本時間庫。定義_MT和_DLL並使編譯器將庫名稱MSVCRT.lib放入.obj文件中。
使用此選項編譯的應用程序靜態鏈接到MSVCRT.lib。這個庫提供了一個允許鏈接器解析外部引用的代碼層。實際的工作代碼包含在MSVCR100.DLL,這必須是可用在運行時與MSVCRT.LIB
/MDD鏈接的應用程序:定義_DEBUG,_MT和_DLL,並使您的應用程序使用調試多線程 - 和運行時庫的DLL特定版本。它還會使編譯器將庫名稱MSVCRTD.lib放入.obj文件中。
因此,除了_DEBUG被定義之外,沒有任何文檔對生成的代碼進行任何修改。
嗨漢斯,謝謝你的回答。這不是我正在尋找的東西,但我會承擔責任。我的問題措辭不佳。我會盡快更新。 – pong