VS2010 MFC exe独立系统环境运行
如何讓一個(gè)VS 生成的 exe 在沒有安裝VS 以及 依賴項(xiàng)dll 的電腦上運(yùn)行,嘗試了一下,將中間遇到的問題記錄一下。
1. 在vs里面編譯運(yùn)行可以,但是點(diǎn)擊Debug里面的.exe卻顯示如下問題:
程序目錄下已經(jīng)添加此dll文件,一般情況下,我們會(huì)把程序中調(diào)用到的dll 文件放于.exe同一目錄下。
顯示為dll文件問題,后發(fā)現(xiàn)為路徑問題,我的.exe文件 路徑為:工程目錄/x64/Debug/**.exe,后將 .exe文件拷貝至 工程目錄/Debug/**.exe ,點(diǎn)擊可以運(yùn)行。因?yàn)槲以诠こ棠夸浵绿砑恿薼ib、include、Resource等文件夾,代碼中有關(guān)路徑的問題導(dǎo)致的。
2.? 在其他電腦上 用程序無法正常啟動(dòng)0xc0150002?的問題:
試用的另一臺(tái)電腦有安裝vs等,但是不管是點(diǎn)擊exe還是直接用vs打開編譯都會(huì)出現(xiàn)此類錯(cuò)誤。
查找資料有說將設(shè)置為在靜態(tài)鏈接庫中使用MFC和MT,但是如果使用的靜態(tài)庫會(huì)有很多錯(cuò)誤,未識(shí)別的外部符號(hào)等,還需要自己重新靜態(tài)編譯庫,還是pass掉此種方法。
考慮到是因?yàn)闄C(jī)器上的dll文件不相同所致,可能是機(jī)器上沒有需要的dll文件,即使有也不能保證dll文件的版本相同。
借助于工具 Dependence 來查看所生成的exe文件依賴的dll文件有哪些 ,可以從此網(wǎng)站下載軟件http://www.dependencywalker.com/
如圖:
無視紅色的錯(cuò)誤提示信息,左側(cè)窗口可以查看.exe都是依賴于哪些dll文件,將這些dll文件全部拷貝到.exe文件夾目錄下,可以運(yùn)行。
opencv類的都在opencv安裝目錄下OpenCv244\opencv\build\x64\vc10\bin;
msvcp100.dll等在 s安裝目錄\VC\redist\x64\Microsoft.VC100.CRT和\VC\redist\Debug_NonRedist\x64\Microsoft.VC100.DebugCRT;
?需要的系統(tǒng)的dll文件都在C:\Windows\System32,在我需要的項(xiàng)目中光此文件下的dll文件就拷貝了二十多個(gè)。
4. 同樣是3的問題中,將exe所有依賴的dll文件全部換為32位的,程序報(bào)**.dll文件沒有被指定在windows運(yùn)行,或者包含錯(cuò)誤。 我以為系統(tǒng)32位dll文件在C:\Windows\SysWOW64路徑下。sysWoW64 (Windows-on-Windows 64-bit)是一個(gè)Windows操作系統(tǒng)的子系統(tǒng), 能夠運(yùn)行32-bit 應(yīng)用? windows操作系統(tǒng)程序, 并且在所有的64-bit 版本的windows上都存在。 之前換成系統(tǒng)在C:\Windows\System32下的dll文件會(huì)報(bào)錯(cuò),后來就換成自認(rèn)為32位dll所在的C:\Windows\SysWOW64,兩者程序報(bào)錯(cuò)相同。 后從網(wǎng)上從新下載dll文件拷貝到exe同目錄下,可以運(yùn)行。 后發(fā)現(xiàn)所調(diào)的文件在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include下。
5. 問題4解決后,程序的某些功能失效,比方說點(diǎn)擊一個(gè)按鈕,打開一個(gè)對(duì)話框,這時(shí)候?qū)υ捒驈棽怀鰜怼? 這種情況,我在測試電腦上裝了vs2010后,把 exe同目錄下系統(tǒng)dll文件刪除,這樣程序會(huì)調(diào)用系統(tǒng)的dll文件,這個(gè)時(shí)候?qū)υ捒蚩梢源蜷_,發(fā)現(xiàn)是所調(diào)用的dll文件不同。 且opencv的功能有問題,cvcapture一直返回NULL,疑似是dll文件拷貝不全的原因,將dll文件全部拷貝到exe同目錄下沒有問題。但是另用一臺(tái)電腦依舊只返回NULL,此原因沒有確切搞清楚。
總結(jié)
以上是生活随笔為你收集整理的VS2010 MFC exe独立系统环境运行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vs2010 MFC 简单制作过程中的
- 下一篇: 《STL源码剖析》学习--6章--pow