2011-08-16 165 views
1

有沒有辦法將dll包含在項目中,這樣我就不必在編譯後將這些dll與我的可執行文件放在同一個文件夾中。 這樣我就可以和他們一起編譯我的項目。這是否可能,如果是的話,有人可以指導我。在Visual Studio中包含dll C++ 2008

我的項目是一個opencv項目,有很多dll,我將不得不包括在文件夾中,我不知道他們是否是.NET程序集,因爲我讀了另一篇文章說它可以用.NET程序集DLL完成。

+0

爲什麼你需要把這些dll與你的可執行文件放在同一個文件夾中?爲了調試或其他原因? –

+1

沒有,所以它運行,例如,當我把程序給別人時,他必須有這些DLL – TasostheGreat

回答

-1

dll被設計爲動態鏈接的 - 也就是說,它們在程序運行時加載。

它們不必與應用程序位於相同的文件夾中,只是在路徑上的某處,因此您只需要一臺opencv dll副本即可用於計算機上所有基於opencv的程序。

編輯:您可以構建openCV以使用靜態庫,但不建議,您仍然有外部依賴關係,如ffmpeg和圖像格式庫,以及Qt(如果使用的話)。

在windows上,你應該建立一個可以捆綁exe和dll的安裝程序。否則Windows會在每次運行應用程序時發出警告innosetup是最簡單的一種。

+0

是的,但是如果例如我想將程序給一個朋友,我想只有一個.exe和不其他文件 – TasostheGreat

+0

因爲MSDN明確指出「路徑上某處」存在安全風險,因此請予以回撥。 – MSalters

0

你不能直接使用DLL的。 「DLL」代表「動態鏈接庫」,這意味着它們不是靜態鏈接庫。當你創建你的可執行文件時,它是「包含」(鏈接)的後一類庫。只有在運行EXE時纔會包含DLL。

你可以查看簡歷文檔,看看你如何得到靜態庫版本的簡歷。

0

我知道你想要做的是部署你的exe文件及其依賴關係(dll),但你也希望它在項目中配置。您可以將項目配置爲使用靜態庫,而不必擔心分發DLL,因爲它們已經內置到exe中。

如果你想使用DLL,因爲你不想膨脹你的exe,那麼你的代碼將不得不實現它的加載,即調用LoadLibrary函數和對特定導出函數的必要調用。一旦你的代碼實現了DLL的加載,那麼你可以按照你所描述的方式部署它們。

相關問題