2015-12-21 89 views
1

我在我的電腦中用dll和.lib文件構建了VTK。當我想創建一個使用VTK的項目時,我必須在項目屬性中包含頭文件和鏈接.lib文件。另外,我還必須將.dll文件添加到項目路徑中。我對此有幾個問題,在Visual Studio中的靜態庫vs DLL

  1. .libs和.dll文件有什麼區別?
  2. 是否可以使用.dll或.lib文件創建項目。 (我可以鏈接.lib文件,而不是將dll添加到路徑或將dll添加到路徑而不鏈接.lib文件)?

我將不勝感激任何解釋。謝謝。

+1

您已經將VTK構建爲DLL項目。該DLL包含可執行代碼(和數據),並且LIB僅包含用於從DLL導出的地址修飾。如果沒有LIB,您需要手動加載DLL並手動修復您的調用。 –

+1

相關:http://stackoverflow.com/a/7096229/214671 –

回答

3
  1. .lib文件被鏈接器用來解析導入的項目。 .dll文件包含在運行時動態加載的代碼。

  2. 如果您有一個靜態庫,它包含所有需要的代碼並且沒有.dll。如果你有一個.dll,你也需要配套的.lib來正確鏈接。

+0

如果我可以使用沒有DLL文件的.lib文件,爲什麼項目生成「vtkxxxx.dll從您的計算機丟失」消息,當我不包括它在路徑中?我有vtkxxxx.dll和vtkxxxx.lib。如何將項目設置更改爲僅包含.lib文件? – Madz

+0

您必須將其創建爲靜態庫,其中所有代碼位於.lib中。這樣一切都將被鏈接到您的.exe,然後你只需要該文件。 –

+0

我明白了。因此,如果當前的.lib需要dll,那麼它們不能用作靜態庫。所以我需要重新創建lib文件,如果我不想將dll添加到項目路徑中? – Madz

1

.lib文件僅在編譯期間由鏈接器使用。而.dll文件在執行期間由編譯的exe使用。換句話說,在編譯完程序後,你不再需要.lib文件。打包軟件進行分發時,您只需要.exe,.dll以及任何未被打包到exe中的資源。

相關問題