2011-07-23 33 views
0

對於下列選項的MSVC9的Win32項目中配置屬性下的顯示 - > C/C++ - >代碼Geberation - >運行時庫:的Dll VS靜態庫(MSVC9運行時庫選項)

/MT,/ MTD,/ MD,/ MDd

對於DLL/MTd應該用於靜態lib/MDd是否正確?

謝謝。

+1

請參閱參考資料:http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx它只是用於選擇運行時庫,但不適用於您自己的代碼。 – Stan

+0

是的,我經歷了那個頁面,但沒有任何意義。你能用簡單的話來解釋一下嗎?謝謝。 – Azodious

+0

例如,如果您選擇/ MT選項,您調用的運行時函數將被放入您的程序(無論是DLL還是靜態Lib)。應該注意的問題是其他人使用您的DLL或靜態Lib時可能發生的衝突。 – Stan

回答

3

有兩個問題在這裏玩。

首先,您需要選擇是否要調試版本的CRT或版本版本。調試版本具有專門的檢查和代碼路徑,旨在幫助您在編寫應用程序時捕獲錯誤。您應該使用而不是將它們用於應用程序的最終發行版,因爲它們可能會減慢其執行速度,並且因爲它們不是可自由重新分發的。

然後,你需要決定是否要靜態鏈接運行時您的應用程序,或者如果你想使用它從一個DLL動態。靜態鏈接允許您創建獨立的EXE文件,而不依賴任何DLL文件;它有效地將運行時代碼編譯到應用程序的二進制文件中。這可以使部署更容易,但是代價是無法利用對運行時DLL所做的安全性和其他更新。您必須重新編譯您的應用程序才能利用新的運行時更新。動態鏈接是Windows應用程序的典型(並推薦)路徑。這意味着您的應用程序將需要適當版本的CRT DLL才能運行,但它允許輕鬆更新運行時庫並且意味着多個程序可以共享相同的代碼,從而減小它們的大小在磁盤上。

所以,/MD意味着動態鏈接和/MT意味着靜態鏈接。每個選項之後的小寫d表示使用運行時庫的版本調試

/MD =動態鏈接釋放CRT

/MDD的(可再發行)版本=動態鏈接到調試(非可再發行)版本CRT的

/MT =靜態連接到CRT的釋放(可再分發)版本

/MTd =靜態鏈接到調試(不可再發行的)版本的CRT

更多信息請訪問MSDN