运行VS2008出现“应用程序无法启动0xc0150002怎么解决”在其他电脑上都能运行,在笔记本上就不能,网上试了好

VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
上传于||文档简介
&&V​S08​编​译​的​程​序​在​某​些​机​器​上​运​行​提​示​“​由​于​应​用​程​序​配​置​不​正​确​,​应​用​程​序​未​能​启​动​”​的​问​题
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢VS2008的在xp SP3上运行报0xc0150002初始化失败现在的问题是:PC&上的事件管理器提示的是:Resolve&Partial&Assembly&failed&&.VC80.CRT.&Reference&error&:&The&referenced&assembly&is&not&installed&on&your&.但是VS2008&带的是&Microsoft.VC90.CRT我打包所带的是VS2008的VC90的,但是提示的却是VC80的版本,与PC机所用的版本不一样,该如何解决?--------------------------------------------------------------顶一下,应该是SDK的问题应用程序无法正常启动(0xc0150002),下载了Microsoft Visual C++ 都无法正确安装,怎么办啊?_百度知道
应用程序无法正常启动(0xc0150002),下载了Microsoft Visual C++ 都无法正确安装,怎么办啊?
苹果笔记本,但QQ游戏可以用,系统恢复,神马都用了还是不行?我用的WIN7系统。QQ,PS,旺旺,很多软件都无法用,如何办啊用360安全卫士查毒
就是我外出时家人硬关电脑后出现上述问题补充,出现问题软件昨天一切都是正常的,现在无法恢复:我用的正版WIN7家庭版
我有更好的答案
s2008可持续性开发库版本不正确,请用你的vc2008重新编译下就好了,如果不是做代码的,那就去下载vc2008的可持续性开发库,如果你是做代码的
谢谢了!只是我是个电脑盲,都是别人给我安装的,不知道什么代码啊?也不会编译。
其他类似问题
为您推荐:
应用程序的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序 - DoubleLi - 博客园
经过一番查找,最给力的参考是-----------------------以下为转载--------------------------------------------------------------首先感谢这位几仁兄的几篇博客:  /fairysky/blog/item/130dda13db7b050a5aaf53be.html  /fairysky/blog/item/e7a8366dbaa735f.html  /lf426/archive//46885.aspx
时间缘由: 有时间再来整理:有点凌乱,不好意思。
感谢的回复:  为什么这么折腾呢?  这样看来,微软发明manifest是错误的,因为大家都为运行库烦恼,真的还不如VC6,这可能吗?其实很简单,打开你的vs,创建一个Setup and Development下的Setup Project项目,然后添加Merge Module,选择你需要的运行库,最后就是Build,生成的文件与你的程序一起发布就行了;
参考资料1、2、3、4、新增(先看看上面的4个链接之后,遇到问题之后再看下面的几个链接)5、 (推荐1)6、 (推荐2)7、ps:有人认为这是一个bug,并汇报到ms网站上,但“推荐1”认为这不是一个bug8、(ms的官方blog对这个问题的解释)(上面链接的中文翻译)9、(推荐,比较难看懂)关于链接9下几个比较有用的链接:(英文),主要讲的是CRT、MFC等的DLL和manifest文件的部署方式使用 Program Files\Microsoft Visual Studio 8\VC\Redist目录中提供的文件将特定 Visual C++程序集作为应用程序的私有程序集安装。允许没有管理员权限的用户安装应用程序或可以通过共享运行应用程序时,建议使用这种方法。有关示例,请参见。(摘自:)总结如下:使用vs2008/vs2008开发的程序有2种部署方法:共享并行程序集和私有程序集部署方法所谓的共享并行程序集部署方法是指程序依赖的CRT、MFC、ATL的DLL和manifest文件位于目标机器上的c:\windows\winsxs目录中,发布程序的时候只需要将程序拷贝到目标机器上就可以了;私有程序集部署方法指的是发布程序程序的时候,将所依赖的crt、mfc、atl的dll放在程序的当前目录下对于release版程序比较的简单的方法是采用共享程序集的方式来部署,安装 (Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)也可以采用下面debug程序的私有程序集的部署方法对于debug版本程序◆ 若目标机器安装了VS开发环境(vs2005 sp1/vs2008 sp1),则在机器上同时也安装了共享并行程序集,包含各个版本的dll(8.0、9.0版本,位于C:\Windows\Winsxs目录下),则不需做任何的部署,直接将需要发布的程序拷贝到目标机器上就可以了,这和release版程序的发布方式是一样的◆ 在没有安装VS开发环境(安装了vs2005 sp1/vs2008 sp1)的机器上,只能采用私有程序集的方式来部署(因为只安装了release版的CRT、MFC、ATL的DLL和manifest文件,没有对应的debug版本)已知的2种方法:(针对vs2008 sp1,安装了sp1之后,在系统上会存在两个版本的CRT、MFC、ATL的DLL:9.0.21022.8和9.0.30729.1)1、使当前程序的manifest文件中的依赖项的版本号与vc安装目录下的redist目录下的dll的版本一致,均为9.0.30729.1方法:a、在编译项目时定义一个符号_BIND_TO_CURRENT_VCLIBS_VERSION,该符号定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h 文件中(假设VC安装在c盘),这样使得编译后的程序的manifest依赖于CRT 9.0.30729.1版本(同样的,对于MFC也应该定义一个类似的符号,大家可以自己在VC的include目录下搜索“9.0.30729.1”或“9.0.21022.8”,就可以找到对应的定义该符号的头文件)b、通过外部工具修改生成的exe或dll中manifest文件(好像windows sdk中的mt.exe可以做到,不过关于这个工具的资料十分的少)2、将VC安装目录下的redist目录下(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)的 Microsoft.VC90.CRT拷贝到要发布的程序的当前目录下,修改Microsoft.VC90.CRT目录中的 Microsoft.VC90.CRT.manifest文件中的版本号,改成9.0.21022.8,这样使得程序误以为该目录下的vc的dll版本是 9.0.21022.8(实质上仍然是9.0.30729.1版本)说明:1、链接4 的说法是错误的,根据我自己的实验,如果采用私有程序集的部署方法,必须保证manifest文件中的版本号都是相等的,不存在要发布的程序的manifest文件中的版本号大于等于依赖项(CRT、MFC、ATL的dll)的版本号的说法2、采用共享并行程序集部署方式发布的程序,会自动根据所谓的“policy”(位于C:\WINDOWS\WinSxS\Policies目录下)进行跳转(由低版本号向高版本号跳转);例如程序中的manifest的版本号为9.0.21022.8,而实际上程序是用vc2008 sp1编译的(版本号为9.0.30729.1),在程序实际执行的时候,会根据x86_policy.9.0.Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_x-ww_037be232目录下的9.0.30729.1.policy文件(可以用记事本打开该文件)中的内容选择9.0.30729.1版本的debugCRT我个人推荐的阅读顺序:① 先看前面的4个链接,大致有点印象,知道什么是manifest、如何查看manifest文件的内容(能力强的话,也可以自己编写manifest文件)、在vc中如何查看编译过程中生成的manifest文件内容、知道C:\WINDOWS\WinSxS\目录是干什么的、知道vcredist.exe这个程序; ② 再尝试着看看链接7、8、9,这些链接的文章内容十分的晦涩,有的还是英文的,需要有点耐心看; ③ 最后仔细的看看链接5、6,并多多试验(特别推荐链接5,这个链接中的内容十分的详细) &
vc2005/vc2008采用了新的程序部署技术(manifest清单文件),manifest清单文件实际上类似于我们常用的makefile文件,它定义了程序运行的依赖关系(程序运行所需要的dll库的名称、版本等)。程序运行,首先根据manifest清单文件(这个文件可以嵌入到exe或dll中,或者单独生成外部文件,可以通过vc2005/vc2008的编译选项控制:工程“属性”-&“配置属性”-&“清单工具”-&“输入输出”-&“嵌入清单文件”,选择“是”或“否”来控制)来查找程序运行需要的dll库的名称、版本等,如果所在的系统中没有程序运行所需要的dll库和相应的manifest清单文件,则弹出“应用程序配置不正确,程序无法启动”对话框。 另 外要注意,由于vc2005/vc2008与.net集成,导致出现一个新的概念:在.net中,将exe、dll都看成“程序集 (assemble)”,每个程序集(assemble)都附带有一个manifest清单文件,因此使得vc2005/vc2008的CRT(C 运行时库)、MFC、ATL等dll库都附带有一个manifest清单文件。归 根结底是由于老版本的系统没有我们开发的程序运行所需要的基本运行时库(2k、xp系统只有vc6的一些dll库,而没有vc2005、vc2008所需 要的dll库以及相应的manifest清单文件,而在vista系统或者即将到来的windows 7系统上则包含有vc2005、vc2008的dll库和manifest清单文件)ps:上面的那段话说的有点幼稚和简单了,这里涉及到很多的问题:程序的升级更新、vs的补丁、库的版本问题等等,不是简单的拷贝、粘贴就能解决的。。。举个例子:(在XP SP3系统下) &使用vc2008 express sp1版(没有mfc、atl),新建一个“HelloWorld”的“win32控制台应用程序”工程,在release下编译,此时默认的编译选项:(在这里我们只关注与我们的问题相关的几个选项)1、工程“属性”-&“配置属性”-&“c/c++”-&“代码生成”-&“运行库”默认选项为/MD(release)、/MDd(debug),对这几个编译选项不清楚的可以参见: 2、工程“属性”-&“配置属性”-&“清单工具”-&“输入输出”-&“嵌入清单文件”默认选项为“是”(表示将manifest清单文件嵌入到程序中);当然,我们也可以选择“否”,从而单独生成一个manifest清单文件,不过这会增加不必要的依赖项,因此不建议选择“否”。编译-&链接之后在“ HelloWorld ”工程的release或debug目录下,我们能够看到一个HelloWorld.exe.intermediate.manifest清单文件(根据编译选项,见上,vc2008将manifest清单文件嵌入到了exe程序中,HelloWorld.exe.intermediate.manifest清单文件是一个临时文件,但它的内容与嵌入到exe程序的manifest文件是一样的),用文本编辑器打开该文件(用“记事本”也行,不过格式太乱,看不清楚内容,推荐使用vim或其它的文本编辑器查看),大致内容如下:ps:在网上看到另外的一个方法,用记事本打开exe或dll程序,查看嵌入到exe或dll中的manifest清单文件,方法:“打开记事本,然后将exe或dll拖入到记事本中,当然了,肯定会出现大段的乱码,没关系,直接往后看,就能发现类似于下面的内容的部分”XML语言: 01 &?xml version='1.0' encoding='UTF-8' standalone='yes'?&02 &assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'&03 &trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"&04 &&&& &security&05 &&&&&& &requestedPrivileges&06 &&&&&&&& &requestedExecutionLevel level='asInvoker' uiAccess='false' /&07 &&&&&& &/requestedPrivileges&08 &&&& &/security&09 &/trustInfo&10 &dependency&11 &&&& &dependentAssembly&12 &&&&&& &assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /&13 &&&& &/dependentAssembly&14 &/dependency&15 &/assembly&我们重点查看红色部分,这说明编译后的exe程序依赖于vc90(也即vc2008)的CRT(C运行时库),版本9.0.(这是由于使用/MD选项,程序动态的依赖于CRT,如果使用/MT选项,则会将CRT静态链接到程序中,当然,这会使程序的尺寸急剧的增长,大概有10倍的大小差距)当exe程序执行时,它会根据嵌入的manifest文件查找相应的依赖项,在这个HelloWorld.exe程序中,它依赖于vc90 CRT,因此它会在“C:\WINDOWS\WinSxS”和“当前目录”下查找相应的dll库以及manifest文件,(这里指的是xp系统,不考虑vista系统,具体的参见:)在我的机器上有2个版本的vc90 CRT(由于安装了vc2008 express sp1)vc90 CRT的dll库位于(9.0.21022.8版本)“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d;相应的manifest文件则位于“C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375.manifest”vc90 CRT的dll库位于(9.0.30729版本)“C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e”相应的manifest文件则位于“C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e.manifest”在这里我们就有一个疑问了,我们的开发环境是vc2008 express sp1,那么我们的程序链接的CRT版本应该是9.0.30729版本的啊?(这个不是我瞎说的,大家可以用来查看程序实际链接的DLL版本),为什么在manifest文件中依赖的CRT却是9.0.21022.8版本的? 这里就涉及到一个新的名词“policy ",操作系统会根据C:\WINDOWS\WinSxS\Policies \x86_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75 \9.0.30729.1.policy文件的内容,进行dll版本的跳转(重点看深蓝斜体字部分)从而选择了9.0.30729版本的vc90 CRT (这个所谓的“policy跳转”是道听途说来的,具体的英文资料藏在microsoft的什么地方我就不得而知了。里面夹带了一些我自己的主观猜测,不然的话,没有办法解释manifest版本号9.0.21022.8是,而实际链接的dll的版本号却是9.0.30729) XML语言: 01 &?xml version="1.0" encoding="UTF-8" standalone="yes"?&02 &!-- Copyright (c) Microsoft Corporation. All rights reserved. --&03 &assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&04&&&& &assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/&05 &&& &dependency&06&&&&&&&& &dependentAssembly&07&&&&&&&&&&&& &assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/&08&&&&&&&&&&&& &bindingRedirect oldVersion="9.0..0.21022.8" newVersion="9.0.30729.1"/&09 &&&&&&&&&&& &bindingRedirect oldVersion="9.0..0.30729.1" newVersion="9.0.30729.1"/&10&&&&&&&& &/dependentAssembly&11&&&& &/dependency&12 &/assembly&如果我们将这个HelloWorld.exe拷贝到其它的机器上(没有安装vc2008 sp1或),则程序因为没能找到vc90 CRT,而不能运行,弹出“应用程序配置不正确,程序无法启动”对话框。根据参考资料的文章中的内容,对于release版程序,有一个简单的办法就是安装“vcredist_x86.exe”,文件大小4M左右,自动安装在“C:\WINDOWS\WinSxS”目录下,包含了CRT、MFC、ATL等库的dll和manifest清单文件;整个安装时间不到1分钟。如果机器上安装了vc2005/vc2008,则会自动的安装vcredist_x86.exe程序,安装后在“控制面板”-&“添加删除程序”中有一项“Microsoft Visual c++ 2008 Redistributable - x86 9.0.3.729”(我安装的是Microsoft Visual C++ 2008 SP1 Redistributable Package (x86) 版本)注意:要根据编译器版本以及vc2005/vc2008是否安装了sp1补丁进行选择对应的vcredist.exe版本
上述的解决办法我称之为共享程序集部署方法,同样的我们也可以采用私有程序集的部署方式来发布程序。Helloworld例子的私有程序集的部署方法:(针对release版本,仍然是采用上面的例子,采用参考资料中提到的第2中私有程序集部署方法:将Microsoft.VC90.CRT目录下的manifest文件的版本号修改为9.0.21022.8)1、将编译后的程序拷贝到一个目录下,假定为d:\helloworld2、将vc安装目录下的redist\x86目录下的Microsoft.VC90.CRT目录拷贝到d:\helloworld(假定vs安装在C:\Program Files\Microsoft Visual Studio 9.0,则vc安装目录为C:\Program Files\Microsoft Visual Studio 9.0\VC)3、将Microsoft.VC90.CRT目录下的manifest文件的版本号修改为9.0.21022.8(用记事本打开修改)最终发布程序的目录结构D:\helloworld&&&&& |--helloworld.exe&&&&& |--Microsoft.VC90.CRT&&&&&&&&&&&&&&&&&&&& |--Microsoft.VC90.CRT.manifest&&&&&&&&&&&&&&&&&&& |--msvcm90.dll&&&&&&&&&&&&&&&&&&&& |--msvcp90.dll&&&&&&&&&&&&&&&&&&& |--msvcr90.dll这个时候,程序的manifest文件(已经内嵌到exe中了)依赖的vc90 CRT的版本号和Microsoft.VC90.CRT.manifest文件的版本号对应一致,都是9.0.21022.8(但是要注意的是,我们的helloworld程序实际上依赖的vc90 CRT版本是9.0.30729版本,这里只是采用了一种欺骗的方法,因为我们编译时链接的CRT的版本是9.0.30729版本) 例子是针对release版,对于debug版本必须要采用私有程序的部署方法,这是拷贝的目录就不是release版的Microsoft.VC90.CRT了,而是Microsoft.VC90.DebugCRT,方法同release版的是一样的
生成Microsoft.VC90.CRT文件目录结构:VC2005和VC2008编译出来的程序放到别人的电脑上为什么有可能无法运行呢?&&&&&&& 这个问题无数人在问,但是很遗憾,没有人给出完整的解释和完美的解决方案。其实我也只有一台电脑,而且装了VC了,这个问题必须要台没有装这类软件的电脑 才容易去分析。感谢那些为了测试我小程序的朋友,是你们一次次在如此恶劣的网络速度下收取我一次次修改的dll包和部署文件,才让这个问题的完美解决方案 浮出水面。这里就把我的经验给大家分享吧。1:Microsoft Visual C++ 2008 Express Edition可以发布软件吗?&&&&&&& 能!&&&&&&& 很多人说,因为是Express版,不是Studio,所以只是用来练习语言的,不能发布软件——错!&&&&&&& 除了没有MFC和ATL,基本上跟 .net 版本是一样的。发布出来的,是完整的可执行文件。2:VC ) 发布出来的程序必须附带上他们特定的dll文件吗?&&&&&&& 不一定。&&&&&&& 如果目标系统是个经常升级的系统,微软已经为其打上了所需要的dll文件补丁了,不需要在软件包里面附加特定的dll文件。特别在Vista系统中,你更是不需要VC8和VC9的dll文件。但是在一些老版本的系统中,这些文件就是必须的。3:VC2008和VC2005特定的dll文件是哪些?VC8: msvcm80.dll, msvcp80.dll, msvcr80.dllVC9: msvcm90.dll, msvcp90.dll, msvcr90.dll4:如何部署文件?首先,请选择release版本;在生成可执行文件(exe文件)的时候,会得到相应的部署文件(manifest文件)。比如,得到a.exe文件,就会同时生成a.exe.intermediate.manifest文件。请将这2个文件放在同一文件夹下。然后,你需要VC8和VC9的部署文件:Microsoft.VC80.CRT.manifest和Microsoft.VC90.CRT.manifest。请到你的VC安装目录下寻找,比如:C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT我这里也把2个部署文件直接贴出来,没装的直接用就是了:Microsoft.VC80.CRT.manifest&?xml version="1.0" encoding="UTF-8" standalone="yes"?&&assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&&noInheritable&&/noInheritable&&assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0." processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"&&/assemblyIdentity&&file name="msvcr80.dll" /& &file name="msvcp80.dll" /& &file name="msvcm80.dll" /&&/assembly&Microsoft.VC90.CRT.manifest&?xml version="1.0" encoding="UTF-8" standalone="yes"?&&!-- Copyright (c) Microsoft Corporation.& All rights reserved. --&&assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&&&& &noInheritable/&&&& &assemblyIdentity&&&&&&& type="win32"&&&&&&& name="Microsoft.VC90.CRT"&&&&&&& version="9.0.21022.8"&&&&&&& processorArchitecture="x86"&&&&&&& publicKeyToken="1fc8b3b9a1e18e3b"&&& /&&&& &file name="msvcr90.dll" /& &file name="msvcp90.dll" /& &file name="msvcm90.dll" /&&/assembly&然后将VC8的3个dll以及这个manifest装到一个文件夹里,并将文件夹命名为Microsoft.VC80.CRT。同样将VC9的3个dll以及这个manifest装到一个文件夹里,并将文件夹命名为Microsoft.VC90.CRT。将这2个文件夹放到与exe文件(及其部署文件)所在目录下就OK了。至于为什么VC9编译的程序要用VC8的dll,大家可以看看我例程部署文件:&?xml version='1.0' encoding='UTF-8' standalone='yes'?&&assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'&& &trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"&&&& &security&&&&&& &requestedPrivileges&&&&&&&& &requestedExecutionLevel level='asInvoker' uiAccess='false' /&&&&&& &/requestedPrivileges&&&& &/security&& &/trustInfo&& &dependency&&&& &dependentAssembly&&&&&& &assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /&&&& &/dependentAssembly&& &/dependency&& &dependency&&&& &dependentAssembly&&&&&& &assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /&&&& &/dependentAssembly&& &/dependency&&/assembly&VC 2008生成出来就需要VC90和VC80的CRT,我们能有什么脾气呢……也就是说,还别管你exe文件多大,要保证正常运行,我们需要首先拷贝这8个文件……MinGW(gcc)编译的就没这些麻烦。所以,我现在都是用两个编译器编译两个exe以供发布了。下次自动登录
现在的位置:
& 综合 & 正文
VS2010 MFC exe独立系统环境运行
用程序无法正常启动0xc0150002
如何让一个VS 生成的 exe 在没有安装VS 以及 依赖项dll 的电脑上运行,尝试了一下,将中间遇到的问题记录一下。
1. 在vs里面编译运行可以,但是点击Debug里面的.exe却显示如下问题:
目录下已经添加此dll文件,一般情况下,我们会把程序中调用到的dll 文件放于.exe同一目录下。
显示为dll文件问题,后发现为路径问题,我的.exe文件 路径为:工程目录/x64/Debug/**.exe,后将 .exe文件拷贝至 工程目录/Debug/**.exe ,点击可以运行。因为我在工程目录下添加了lib、include、Resource等文件夹,中有关路径的问题导致的。
在其他电脑上
试用的另一台电脑有安装vs等,但是不管是点击exe还是直接用vs打开编译都会出现此类错误。
查找资料有说将设置为在静态链接库中使用MFC和MT,但是如果使用的静态库会有很多错误,未识别的外部符号等,还需要自己重新静态编译库,还是pass掉此种方法。
考虑到是因为机器上的dll文件不相同所致,可能是机器上没有需要的dll文件,即使有也不能保证dll文件的版本相同。
借助于工具 Dependence 来查看所生成的exe文件依赖的dll文件有哪些 ,可以从此网站下载软件
无视红色的错误提示信息,左侧窗口可以查看.exe都是依赖于哪些dll文件,将这些dll文件全部拷贝到.exe文件夹目录下,可以运行。
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;
需要的系统的dll文件都在C:\Windows\System32,在我需要的项目中光此文件下的dll文件就拷贝了二十多个。
3.为了让32位与64位的电脑都能运行,要将工程改为32位。
在X64 win7 系统下 vs2010建立工程设置为 win32 调用 opencv 32位库以及配置了32位的dll文件,编译可以通过,运行出现错误:
应用程序无法正常启动0xc000007b
依然是dll文件问题,dll文件没有在搜索路径上,或者dll文件位数不对。
在工程中Configuration Properties-& VC++ Directories -& Executable Directories中添加 bin路径,没有用,虽然其中默认包括了 $(PATH)。
需要将dll文件放于exe同目录下,或者加入系统环境变量path。
4. 同样是3的问题中,将exe所有依赖的dll文件全部换为32位的,程序报**.dll文件没有被指定在windows运行,或者包含错误。
我以为系统32位dll文件在C:\Windows\SysWOW64路径下。sysWoW64 (Windows-on-Windows 64-bit)是一个Windows的子系统,
能够运行32-bit 应用
程序, 并且在所有的64-bit 版本的windows上都存在。
之前换成系统在C:\Windows\System32下的dll文件会报错,后来就换成自认为32位dll所在的C:\Windows\SysWOW64,两者程序报错相同。
后从网上从新下载dll文件拷贝到exe同目录下,可以运行。
后发现所调的文件在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include下。
5. 问题4解决后,程序的某些功能失效,比方说点击一个按钮,打开一个对话框,这时候对话框弹不出来。
这种情况,我在测试电脑上装了vs2010后,把 exe同目录下系统dll文件删除,这样程序会调用系统的dll文件,这个时候对话框可以打开,发现是所调用的dll文件不同。
且opencv的功能有问题,cvcapture一直返回NULL,疑似是dll文件拷贝不全的原因,将dll文件全部拷贝到exe同目录下没有问题。但是另用一台电脑依旧只返回NULL,此原因没有确切搞清楚。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 正常初始化0xc0150002 的文章

 

随机推荐