2009-08-04 47 views
4

我想了解Visual Studio 2008的運行時庫的一些信息。特別是何時應該考慮DLL版本以及什麼時候應該考慮靜態版本。Visual Studio 2008,運行時庫使用建議

Visual Studio文檔描述了DLL依賴關係和鏈接庫方面的技術差異。但我仍然想知道爲什麼我應該使用一個。更重要的是,我又何必要使用多線程DLL運行時,這顯然迫使我的應用程序到DLL的依賴,而靜態運行時有我的應用程序的用戶的機器上沒有這樣的規定。

+1

此線程討論相同的事情:http://stackoverflow.com/questions/238465/static-or-dynamic-linking-the-crt-mfc-atl-etc – Laserallan 2009-08-04 17:23:45

回答

3

Larry Osterman認爲應該編程的應該是always use the multi-threaded DLL。總結:

  • 您的應用程序將會更小
  • 您的應用加載速度更快
  • 你的應用程序將支持多線程,而不
  • 您的應用程序可以分成多個DLL更容易改變庫的依賴(因爲只會有一個運行時庫實例加載)
  • 您的應用將自動更新Microsoft提供的安全修補程序

請閱讀他的whole blog post瞭解詳細信息。

不利的一面,你需要redistribute運行時庫,但是這通常做,你可以找到如何將其納入您的安裝documentation

5

動態連接到運行時庫會使得部署稍微複雜化,這是由於DLL依賴性的原因,而且還允許應用程序在不重新編譯的情況下利用MS運行時庫的更新(錯誤修復或更可能的性能改進)。

靜態鏈接簡化了部署,但同時也意味着你的應用程序必須運行的新版本才能使用它們進行重新編譯。

1

動態鏈接運行時庫可以讓你更快的程序,因爲該dll可以在進程間共享,將不需要再次加載,如果它已經被另一個進程啓動時間和更小的系統內存使用情況。

1

我認爲主要的區別是如何處理異常。微軟不建議在DLL靜態鏈接到CRT,除非這樣的後果是特別期望和理解:

例如,如果你在加載鏈接到其自己的靜態的DLL的可執行文件調用_set_se_translator CRT中,由DLL中的代碼生成的任何硬件異常不會被翻譯器捕獲,但會捕獲主要可執行文件中的代碼生成的硬件異常。

相關問題