小弟最近進行cocos2dx win32專案開發。
我想對它進行編譯打包生成一個 exe檔案,可以在任意電腦上運行。
根據網上提示,我需要設定專案屬性 把 "代碼生成"一欄里的 MD 改為 MT。
改成MT后,在一些干凈的系統上測驗仍然會報 msvcr110.dll, msvcp120.dll 丟失錯誤。
從網上資料來看,MT方式 便把所有需要的dll 打包進exe里了。為何仍然報 這些dll丟失的錯誤呢。
開發環境:win 8.1 64位 vs2012 cocos2dx-3.2rc
測驗環境:windows xp 32位, win 7 64位, win 8 pro
各位是如何編譯打包win32專案,并可以在任意支持的系統上直接運行,而不會報dll缺失。
uj5u.com熱心網友回復:
打包弄得少,但我記得打包之前不是要檢測依賴項嗎?檢測到了后全部打包進去應該是沒問題的uj5u.com熱心網友回復:
請問如何檢測依賴項,檢測依賴項后把庫也打包進去,這個是如何做的?
我試了兩種方式,一種是直接編譯生成release檔案夾拿去測驗,另一種是 用 InstallSheld 打包工具 對 release檔案夾進行組織打包得到安裝包,這兩種都有問題,還是報dll丟失。
uj5u.com熱心網友回復:
使用DEPENDS.EXE檢查程式的依賴項,看看程式都依賴了哪些dll也可以到測驗環境上用DEPENDS.EXE打開exe程式,看看哪些專案是打著黃色問號的,說明環境中缺少相應的dll。
uj5u.com熱心網友回復:
使用depends.exe在目標機上查看exe依賴的dll缺哪些(紅色文字)然后從開發機上拷貝這些缺的dll到目標機和exe相同的檔案夾下。
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
uj5u.com熱心網友回復:
額,右鍵 屬性 系統必備 但是這只能檢測到系統的 不能檢測到你使用到的DLL。。。
關于 你這種情況 我想提醒一下 !不知道會不會有這種情況!!!假如你的程式直接生成在exe檔案夾里,而你的dll在bin檔案夾,如果你打包的時候,直接打包exe檔案夾或者把dll放在exe檔案夾里一起打包估計是有問題的!因為你程式里面的呼叫路徑不會去找你放在exe檔案夾下面的dll,而是去找bin檔案夾下的dll導致的錯誤呢。。。?
uj5u.com熱心網友回復:
回復各位,用depends.exe 查看了,是缺少msvcr110.dll, 從開發機上找到這個檔案 復制到 跟exe同一個目錄下,然后雙擊該exe, 沒有反應,也不報任何錯。嘗試regsvr32 msvcr110.dll 提示說 已加載msvcr110.dll, 但未找到dllregisterserver輸入點,無法注冊這個檔案。
估計是這個dll沒有被注冊,導致無法運行。
何解?
uj5u.com熱心網友回復:
Visual C++ Redistributable for Visual Studio 2012The Visual C++ Redistributable Packages install runtime components that are required to run C++ applications built with Visual Studio 2012.
uj5u.com熱心網友回復:
Visual C++ Redistributable for Visual Studio 2012
The Visual C++ Redistributable Packages install runtime components that are required to run C++ applications built with Visual Studio 2012.
uj5u.com熱心網友回復:
Visual C++ Redistributable for Visual Studio 2012
The Visual C++ Redistributable Packages install runtime components that are required to run C++ applications built with Visual Studio 2012.
我不想安裝它,在新裸機上直接就可以運行的那種。
uj5u.com熱心網友回復:
設定目標型別為xp兼容試試。uj5u.com熱心網友回復:
還有種可能就是cocos2dx呼叫了msvcr110.dll這些檔案,這樣的話你使用/MT鏈接也沒用,你自己的EXE不需要這些DLL,但你所呼叫的模塊需要這些DLLuj5u.com熱心網友回復:
回復各位,用depends.exe 查看了,是缺少msvcr110.dll, 從開發機上找到這個檔案 復制到 跟exe同一個目錄下,然后雙擊該exe, 沒有反應,也不報任何錯。
嘗試regsvr32 msvcr110.dll 提示說 已加載msvcr110.dll, 但未找到dllregisterserver輸入點,無法注冊這個檔案。
估計是這個dll沒有被注冊,導致無法運行。
何解?
msvcr110.dll不是COM組件,不需要注冊,只要放在程式能找到的目錄下就行了
uj5u.com熱心網友回復:
Visual C++ Redistributable for Visual Studio 2012
The Visual C++ Redistributable Packages install runtime components that are required to run C++ applications built with Visual Studio 2012.
我不想安裝它,在新裸機上直接就可以運行的那種。
這個沒辦法,必須安裝,直接放相關dll到exe目錄下沒用,反正只是執行一個redistxxxx.exe而已,你完全可以把這個運行時包放到你安裝包中,安裝時釋放然后執行一下而已,不需要人工干涉。
uj5u.com熱心網友回復:
樓主最后打包成功了嗎?uj5u.com熱心網友回復:
也遇到了這個問題。 用VS2012編譯的dll,在干凈的win2012上使用時,缺少msvcr110.dll。因為是dll,沒有直接報錯,找了半天才找出原因。 后來從win8.1 64 位OS上拷貝了到相應目錄下,解決。 但是我也想編譯時直接編譯進來啊。uj5u.com熱心網友回復:
使用depends.exe在目標機上查看exe依賴的dll缺哪些(紅色文字)
然后從開發機上拷貝這些缺的dll到目標機和exe相同的檔案夾下。
沒裝vs的機子通常都會報丟失msv***.dll檔案
uj5u.com熱心網友回復:
沒有哪個就裝哪個唄,去微軟官網下載http://www.henryxi.com/the-program-cant-start-because-msvcr110dll-is-missing
uj5u.com熱心網友回復:
……似乎樓主沒弄明白怎么在VS中打包啊!VS中打包是需要建立一個“安裝部署”專案的,然后把要打包的內容包含進來,包括注冊表,快捷方式,各種依賴項等等,麻煩的情況下,還需要自己寫DLL,對安裝程序進行定制。
uj5u.com熱心網友回復:
選擇“在靜態庫中使用MFC"轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/72609.html
標籤:Cocos2d-x
