2016-08-18 67 views
-1

我想如果你編譯Visual工作室使用/MT代碼發生 - >運行時庫,然後它會自動打包2013的Win32項目的所有依賴的DLL - 包括第三方DLL的 - 到可執行文件?確保所有依賴的DLL被打包成可執行

當前某些用戶在運行我的.exe時出現錯誤。它涉及到沒有一個第三方的DLL(OpenSSL的):

程序無法啓動,因爲LIBEAY32.DLL從您的計算機

已發生用戶這個錯誤使用我的.exe文件丟失在Windows 10操作系統上。我怎樣才能確保所有的依賴DLL的打包到我的.exe?

我現在編在我的64位Windows操作系統8.1我的應用程序。

  • 字符集:在Win32視覺工作室項目使用下面的項目屬性編譯的Unicode字符集
  • 使用MFC的:使用標準Windows庫
  • 整個程序優化:使用鏈接時代碼生成
  • 調試信息格式:無
  • 代碼發生 - >運行庫:/ MT
+1

不,'/ MT'不會將DLL打包到生成的二進制文件中。 –

回答

1

/MT表示您正在使用多線程,運行時庫的靜態版本。這不會影響第三方依賴性,例如OpenSSL仍然是動態鏈接的。

要檢查您的DLL的依賴,我更喜歡Dependency Walker工具。它會顯示是否遺漏了一些依賴項。

爲了確保鏈接到您的.exe文件使用靜態鏈接的所有第三方的依賴,例如,全依賴對於OpenSSL,您應該使用libeay32MT.lib庫。

0

尼基塔是正確的,使用的Dependency Walker和我想補充一點,你缺少什麼DLL中確實是有一定的瞭解。沒有冒犯的意思,我知道dll可以是皮塔餅。 What is a DLL?

根據定義不包含一個DLL在您的.exe,但它在運行時加載和幾個之間的應用程序可以共享。如果你想將它包含在你的.exe中,它將需要一些額外的非常重要的工作來將它們嵌入到你的exe中,並在運行時解壓和加載。 請參閱this post

我建議使用安裝程序,而不是更容易處理!只需創建一個安裝程序(您知道單擊單擊單擊「是 - 是 - 我同意 - 完成」嚮導安裝程序),將包括您的.exe和所有需要的依賴文件。作爲參考Inno setup是相當偉大的。

相關問題