我有一個從源代碼(gdal)編譯的DLL。我有一個簡單的C++ Win32控制檯項目,它有一個源文件,但我想鏈接該DLL。目前,當我嘗試運行該項目時,它編譯正確,但表示無法找到該DLL。如果我將DLL移動到與DLL相同的目錄,則exe將運行。有沒有辦法讓我的輸出EXE包含DLL,以便我可以將一個文件移動到另一個系統並運行它,而無需使用exe發送DLL。如何將DLL添加到VS2010 C++項目
我該如何在VS2010中做到這一點?
我有一個從源代碼(gdal)編譯的DLL。我有一個簡單的C++ Win32控制檯項目,它有一個源文件,但我想鏈接該DLL。目前,當我嘗試運行該項目時,它編譯正確,但表示無法找到該DLL。如果我將DLL移動到與DLL相同的目錄,則exe將運行。有沒有辦法讓我的輸出EXE包含DLL,以便我可以將一個文件移動到另一個系統並運行它,而無需使用exe發送DLL。如何將DLL添加到VS2010 C++項目
我該如何在VS2010中做到這一點?
除非你有.dll的原始源代碼,重新編譯爲一個靜態庫(.lib),然後靜態鏈接到它,我不相信有一種方法可以將動態鏈接庫「包含」可執行文件。
您需要路徑中的DLL或當前目錄中的應用程序才能運行。這就是它如何與DLL一起工作。
使用靜態庫時,鏈接將庫代碼嵌入到應用程序中。如果你不能或不想讓DLL可用,你可以將你的DLL改爲一個靜態庫。
請務必閱讀第三方工具的許可證(本例中爲gdal)。有些許可證不會對靜態鏈接產生好感。 –
這是麻省理工學院的風格,所以它應該沒問題。 –
確實如此,並且可能會出現其他問題,可能會嘗試將其作爲靜態庫來執行。只要保持與exe的DLL是最容易做的事情。 – crashmstr
由於您是從源代碼編譯的,您可以將源文件添加到您的項目並將其直接構建到您的可執行文件中。
您可以在Visual Studio項目中創建一個生成後事件,該項目運行腳本以將DLL複製到可執行文件的路徑。
然後,當您部署應用程序時,安裝程序將能夠爲您管理DLL管理。
有!將DLL作爲資源嵌入到可執行文件中,在啓動時將其帶出磁盤並動態加載它! *請不要這樣做*。 –
髒!我喜歡! – aardvarkk