我鏈接到VS2008中的一些庫。如果我對鏈接器的瞭解是正確的,那麼MTd用於靜態鏈接,MDd用於動態鏈接(到DLL)。我的目標是靜態鏈接一些庫和其他動態鏈接。項目選項似乎只對鏈接器輸入中的所有庫有一個設置。我將如何做到這一點?Visual Studio:如何爲鏈接器指定不同的運行時庫? (/ MTd,MDd等)
回答
根據您對新建項目嚮導提示的回答方式,您的項目在設置完成後將獲得一個合理的C運行時庫默認值。您可以檢查和改變這個(如果需要)如下:
- 在解決方案資源管理器中右鍵單擊相關項目,選擇Properties
- 外觀配置屬性下,C/C++,代碼生成,運行時庫。
但是您可以鏈接其他庫,但您只需指定鏈接到鏈接器,輸入,附加依賴項下的庫。
即使您正在鏈接到一個DLL,它仍然會有一個.LIB文件(用於DLL的正確形式)來解析外部引用,除非您手動加載該DLL並發現所需的函數入口點。
您確實需要確保鏈接的LIB文件與您的應用使用相同的CRT,否則事情可能會意外地出錯。
我不認爲我們彼此瞭解。你的回答告訴我你對此知道,但我可能不理解。我的運行時庫是「多線程調試(/ MTd)」,我的鏈接器輸入是「cg.lib cgD3D9.lib Winmm.lib wininet.lib fbxsdk_20113_1d.lib d3d9.lib d3dx9.lib dinput8.lib dxguid.lib」是否這樣做看起來正確?原因是我認爲混合調試和發佈庫會導致問題。 – 2010-11-29 20:07:44
在這裏查看Hans的附加信息。 `/ Mxxx`標誌決定了只有CRT版本**你當前的項目**鏈接到 - 每個應用程序必須鏈接到CRT。您希望使用的任何其他**庫都在您的項目屬性中命名 - 它們可以是靜態或動態的,但是如果您打算鏈接到任何DLL,則需要確保您的應用程序的CRT已準備好了DLL。任何更清楚? – 2010-11-29 20:10:23
不,你在混合它。/MD vs/MT選項只與您鏈接的CRT版本相關。有兩種,即只有在項目中不使用任何DLL的情況下才應使用的靜態版本(/ MT)。 DLL版本是您的進程中每個二進制文件都可以共享的版本,這樣您就不會有堆分配的痛苦。當內存由一個模塊分配並由另一個模塊釋放時,您會遇到的種種苦惱。
選擇您自己的庫完全取決於您。混合和匹配很好,鏈接器只是獲得另一種.lib。導入庫而不是靜態庫。請記住在使用DLL時使用/ MD。
您描述的鏈接器選項僅適用於CRT。靜態版本將限制你在模塊之間共享內存的方式。
您使用的所有其他庫將根據您提供(或不提供)鏈接器的.lib文件進行鏈接。
有3種方法使用MS庫
- 靜態鏈接靜態庫(.LIB equivelant的.o的.A歸檔)
- 靜態鏈接存根(生成的.lib編譯LOADLIB/getproc)動態庫的
- 如果您鏈接到一個lib,這是預建與MT手動加載一個動態庫(LOADLIB/GetProcAddress的)
和你所要求的MD是我的問題似乎成爲。
反之亦然。
它認爲我將不得不下載並重新建立外部依賴關係,因爲我現在被捕獲到22,當我選擇MT時,我的項目/解決方案的某些部分出現構建錯誤,當我選擇MD我得到另一部分的錯誤..
- 1. 在相同的visual studio解決方案中使用\ MDd和\ MTd?
- 2. Visual C++運行時庫鏈接程序的問題
- 3. 如何使用cl.exe鏈接靜態庫? (指定運行時庫)
- 4. 如何構建在VS2005中使用MDd dll的MTd項目
- 5. 尋求更深入的瞭解Visual Studio C運行時庫鏈接行爲
- 6. Visual Studio 2010運行時庫
- 7. Microsoft Visual Studio〜C/C++運行時庫〜靜態/動態鏈接
- 8. 如何鏈接Visual Studio中的fmod庫
- 9. 在Visual Studio中靜態鏈接庫
- 10. Visual Studio C++鏈接器警告:LNK4006與C運行時(CRT)
- 11. 如何使用CMake默認生成GTest build/MDd(而不是/ MTd)?
- 12. 行爲時不同的Visual Studio之外運行
- 13. Windows CE 6.0和運行時鏈接到調試DLL/MDd
- 14. ffmpeg的Windows庫不鏈接(visual studio)?
- 15. Visual Studio,csproj:如何在DependentUpon中指定鏈接的文件?
- 16. Javascript:設置定時器每分鐘運行不同的鏈接
- 17. 在Visual Studio中鏈接庫
- 18. 爲什麼運行時庫是編譯器選項而不是鏈接器選項?
- 19. 爲gcc鏈接器指定可選庫
- 20. Java如何在運行時鏈接庫
- 21. Visual Studio 2010 Assimp庫將不會鏈接
- 22. Visual Studio的C++ - 檢查鏈接的原因特定庫
- 23. 調試Visual Studio鏈接器
- 24. visual studio鏈接器錯誤
- 25. 爲什麼我需要爲靜態lib構建指定運行時庫類型?
- 26. Visual Studio 2010如何成功鏈接不在鏈接列表中的庫
- 27. Visual Studio鏈接器找不到libboost_system
- 28. 同時運行Visual Studio 2008和2010
- 29. 如何在Visual Studio中打開Web瀏覽器中的鏈接而不是Visual Studio中的鏈接?
- 30. CUDA&Visual Studio 2008:嘗試鏈接不同項目時的問題
我不明白這是如何幫助我。沒有關於指定每個庫的鏈接器選項的部分。 – 2010-11-29 20:01:40