2014-03-01 38 views
-1

我得到了一個巨大的Microsoft Visual C++ 2003項目,該項目生成一個可執行文件(.exe),其中項目本身取決於多個DLL。我注意到,即使代碼設法編譯,當它運行時它會查找它依賴的DLL(例如我的程序稱爲abc,它依賴的DLL稱爲def.dll),即使添加了路徑包含在項目設置中,它會抱怨說除非將包含def.dll的文件夾添加到%PATH%變量,否則找不到DLL。Microsoft Visual C++ - 編譯一個單獨的DLL,無需依賴關係

因此,最終產品不是一個exe,而是一個exe文件,其中包含大量DLL。

是否有可能將所有內容編譯爲一個.exe文件,以便我可以將這個可執行文件與我一起運行,並且可以在我擁有的每臺PC上運行?該項目本身很大,所以我不打算改變每一個.h和.cpp文件,但如果在Visual C++中有一個快速的設置更改,我認爲這將是很好的。我知道這個.exe可能會大10倍,編譯它可能需要幾個小時,但我認爲可移植性在這裏非常重要。

謝謝!

PS:不知道爲什麼人們投票下來這篇文章...我不能再問StackOverflow的合法問題嗎?我知道這個問題對你們中的一些人來說可能聽起來微不足道,但我只是爲了說明而簡化了這個問題。

+0

將所有DLL放在與可執行文件相同的目錄中,並完成作業。 –

+0

@DavidHeffernan除了DLLs在不同的文件夾中屬於不同的依賴程序,爲了說明起見,我簡化了這個問題 – AZhu

+0

仍然,在可執行目錄中放置副本是可接受的解決方案 –

回答

1

您需要將DLL重建爲獨立(靜態庫)並將靜態庫添加到鏈接器設置。但是,如果您不知道預處理器設置和可能的代碼更改以創建此類靜態庫,我不建議您這樣做。

除非作者爲您提供執行此任務所需的步驟(通常需要使用-D選項定義預處理器常量),否則不能只取DLL源代碼並重新編譯爲靜態庫。這些常量是什麼以及需要採取哪些額外步驟 - DLL的作者必須告訴你這一點。

如果DLL的原始作者再也沒有建立過靜態庫,那麼我不建議你嘗試一下,除非你是熟悉必須改變的專家的程序員。在這種情況下,作者從來沒有打算將代碼用作靜態庫,因此所做的更改可能非常廣泛。