【link】应用程序无法正常启动0xc0150002解决方案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/SoaringLee_fighting/article/details/84339462

DATE:; 2018.11.23


https://blog.csdn.net/dodott/article/details/53420798
https://blog.csdn.net/hebbely/article/details/54374979

网上提供的解决方案:
通过分析,很可能的原因是 应用程序依赖的动态库dll存在问题导致的,比如crt库,mfc库等。

我也遇到过此问题,解决办法:
方案一: 在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。

方案二:不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为exe文件的全名加上“.manifest”),避免了嵌入清单文件可能失败的问题。

最近做一个项目写了一个VC6下的MFC程序,结果传到别人的机子上(WIN7)出现了应用程序正常初始化(0xc0150002)失败的问题,当时还以为就是WIN7的问题,后来把程序拷贝到一台WINXP SP3的程序下还是不行。

为什么我的机子上可以,而别人的机子上运行不了呢?

开始google一下,找到了解决的一个办法——在程序运行出错的时候,右键“我的电脑”,然后点击“管理”,再点击“事件查看器",最后看下“系统”,信息如下:

(1)找不到附属汇编 Microsoft.VC80.DebugCRT,上一个错误是 参照的汇编没有安装在系统上。

(2)Resolve Partial Assembly 为 Microsoft.VC80.DebugCRT 失败。 参考错误消息: 参照的汇编没有安装在系统上。
(3)Generate Activation Context 为 C:/scanfile/Debug/libclamavd.dll 失败。 参考错误消息: 操作成功完成。

可以判断是libclamavd加载的时候出了点问题了,看了下它的manifest文件,其依赖库是Microsoft.VC80.DebugCRT ,这样问题就很明显了,这个dll是在VS2005下编译的,而别人的机子上没有这个环境,我们所编译生成的应用程序由于缺少必需的Debug版本的VC运行库而发生错误。
解决方法:到我的机子上的vs2005的安装目录下,搜索名字中包含串Microsoft.VC80.DebugCRT的文件,共有3个dll文件(msvcm80d.dll,msvcp80d.dll,msvcr80d.dll)和一个manifest文件(Microsoft.VC80.DebugCRT.manifest),拷贝到别人机子上的工程可执行文件目录下,问题就解决了。
从这个问题可以发现几点:
(1)善用工具可以帮助定位问题:事件查看器,depends walker
(2)搜索效率


THE END!

展开阅读全文

应用程序无法正常启动(0xc000007b)/(0xc0150002),请单击确定关闭程序

04-01

我刚重装了win7 x64系统,在上面写了一个vs2008+cuda4.1+opencv2.3(cuda和opencv的环境都已确定配置好了)的图像像素变换的例子,代码在下面,debug版本下编译和链接都没错,运行时就提示“应用程序无法正常启动(0xc000007b)/(0xc0150002),请单击确定关闭程序”,切换到release版本运行就没错。在网上找了各种答案,都说是32位和64位间DirectX的相关dll的问题(网上出现这一问题是在玩游戏软件时,可参考:http://blog.csdn.net/vbcom/article/details/6218535,怀疑不对我的症状),照着改了dll还是没用,跪求大牛指教!rnrnrnrn贴出一些调试输出信息:rn“AIRWCtest.exe”: 已加载“H:\C++程序\AIRWCtest\x64\Debug\AIRWCtest.exe”,已加载符号。rn“AIRWCtest.exe”: 已加载“C:\Windows\System32\ntdll.dll”rn“AIRWCtest.exe”: 已加载“C:\Windows\System32\kernel32.dll”rn“AIRWCtest.exe”: 已加载“C:\Windows\System32\KernelBase.dll”rn“AIRWCtest.exe”: 已加载“D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\bin\cudart64_41_28.dll”,未使用调试信息生成二进制文件。rn“AIRWCtest.exe”: 已加载“D:\OpenCV2.3\build\x64\vc9\bin\opencv_highgui230d.dll”rn程序“[4700] AIRWCtest.exe: 本机”已退出,返回值为 -1072365566 (0xc0150002)。rnrnrn贴出源代码:rnrn[code=C/C++]#include rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define ThreadX 16rn#define ThreadY 16 rnrntexture texRefSource;rntexture texRefTarget;rnrn__constant__ float c_trans[9];rnrn__global__ void transformKernel(float* dev_bitmap,int width, int height)rnrn //计算拾取坐标rn unsigned int x = blockIdx.x * blockDim.x + threadIdx.x;rn unsigned int y = blockIdx.y * blockDim.y + threadIdx.y;rnrn float3 v=make_float3(x,y,1);rn float3 r0=make_float3(c_trans[0],c_trans[1],c_trans[2]);rn float3 r1=make_float3(c_trans[3],c_trans[4],c_trans[5]);rn float3 r2=make_float3(c_trans[6],c_trans[7],c_trans[8]);rnrn float tz=dot(r2,v);rn float tx=dot(r0,v)/tz;rn float ty=dot(r1,v)/tz;rnrn //从纹理存储器中拾取数据,并写入显存rn dev_bitmap[y * width + x] = tex2D(texRefTarget, tx, ty);rnrnrnint main()rn rn // load and set source filern IplImage* source=cvLoadImage("C:\\1368.bmp"); rn IplImage* sourcegray =cvCreateImage(cvGetSize(source),source->depth,1);rn cvCvtColor(source,sourcegray,CV_BGR2GRAY);//image1图像灰度化rnrn int w1 = sourcegray->width;rn int h1 = sourcegray->height;rn int size1=w1*h1;rnrn cudaArray* SourcecuArray;rn cudaChannelFormatDesc channelDesc1 = cudaCreateChannelDesc(32, 0, 0, 0,cudaChannelFormatKindFloat);rn cudaMallocArray(&SourcecuArray, &channelDesc1, w1, h1);rn cudaMemcpyToArray(SourcecuArray, 0, 0, sourcegray->imageData,size1,cudaMemcpyHostToDevice);rn rn texRefSource.addressMode[0] = cudaAddressModeWrap; //循环寻址方式rn texRefSource.addressMode[1] = cudaAddressModeWrap;rn texRefSource.filterMode = cudaFilterModeLinear;rnrn cudaBindTextureToArray(texRefSource, SourcecuArray, channelDesc1);rn rn // load and set target filern IplImage* target=cvLoadImage("C:\\1369.bmp");rn IplImage* targetgray =cvCreateImage(cvGetSize(target),target->depth,1);rn cvCvtColor(target,targetgray,CV_BGR2GRAY);//image1图像灰度化rn cvNamedWindow("before", CV_WINDOW_AUTOSIZE );rn cvShowImage("before", targetgray);rnrn int w2 = targetgray->width;rn int h2 = targetgray->height;rn int size2=w2*h2;rnrn cudaArray* TargetcuArray;rn cudaChannelFormatDesc channelDesc2 = cudaCreateChannelDesc(32, 0, 0, 0,cudaChannelFormatKindFloat);rn cudaMallocArray(&TargetcuArray, &channelDesc2, w2, h2);rn cudaMemcpyToArray(TargetcuArray, 0, 0, targetgray->imageData,size2,cudaMemcpyHostToDevice);rn rn texRefTarget.addressMode[0] = cudaAddressModeWrap; //循环寻址方式rn texRefTarget.addressMode[1] = cudaAddressModeWrap;rn texRefTarget.filterMode = cudaFilterModeLinear;rnrn cudaBindTextureToArray(texRefTarget, TargetcuArray, channelDesc2);rnrn //----------------------构造从image1----->image2的变换矩阵,存入常量内存c_trans----------//rn float u[9]=-0.00363945, 123.461, 123.154, 1.0105, 0.868716, 1.2, 1.2, -0.000110196, 0.000174003;rn float matM[3][3]= u[3]*cos(u[0]), u[4]*sin(u[0]), 0,rn -u[5]*sin(u[0]), u[6]*cos(u[0]), 0,rn u[7], u[8], 1; rn CvMat M = cvMat(3,3,CV_32FC1,matM); //求得的是image2-->image1的M。rn CvMat invM = cvMat(3,3,CV_32FC1,matM); //求得的是image1-->image2的M。rn cvInvert(&M,&invM);rn for (int i=0;i<3;i++)rn rn for (int j=0;j<3;j++)rn rn c_trans[i*3+j]=CV_MAT_ELEM(invM,float,i,j); rn rn rn //-------------------------------------------------------------------------------------------------//rnrn float *dev_bitmap=NULL;rn int size=size1*sizeof(float);rn cudaMalloc((void**)&dev_bitmap, size);rnrn //开始变换图像rn dim3 blockSize(ThreadX, ThreadY); rn dim3 gridSize( (w1+ThreadX-1) / blockSize.x, (h1+ThreadY-1) / blockSize.y);rn transformKernel<<>>(dev_bitmap,w1,h1);rn rn CPUBitmap bitmap(w1,h1);rn cudaMemcpy(bitmap.get_ptr(),(unsigned char*)dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost);rnrn bitmap.display_and_exit();rn rn cvWaitKey(0);rnrn cvReleaseImage(&source);rn cvReleaseImage(&sourcegray);rn cvReleaseImage(&target);rn cvReleaseImage(&targetgray);rnrnrn cvDestroyAllWindows();rnrn cudaFreeArray(SourcecuArray);rn cudaFreeArray(TargetcuArray);rn cudaFree(dev_bitmap);rn return 0;rnrnrn rnrn rnrn rnrn rnrn [/code] 论坛

没有更多推荐了,返回首页