[原创]VC++2005编译出程序在XP下执行出错的解决方法
文章标题:[
原创]VC++2005编译出程序在XP下执行出错的解决方法顶部 代码罐头 发布于:2006-03-2911:00 [楼主][原创]VC++2005编译出程序在XP下执行出错的解决方法
文章作者:代码罐头[E.S.T]
信息来源:邪恶八进制信息安全团队(eviloctal)
这个问题主要出现在XP环境下运行由VisualC++2003/2005编译的MFC程序时
问题现象是XP运行此类程序时,报错"由于应用
程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题"
这个问题似乎许多人遇见过.在CSDN和微软社区里面都有人提到.但是没有完整的解决
方案 这个
问题的解决一共会遇见2个子问题
最早出现这个错误我和许多人认为的一样
认为是缺乏DLL库文件导致.但是在测试机复制了DLL甚至安装了.netframework2.0以后
都无法解决问题,最后确认不是由缺乏DLL所致
因为程序是纯win32的应用程,非托管代码,所以也无需.netframework
VisualC++2003/2005默认的MFC程序是使用动态MFC库(UseMFCinaSharedDLL)来链接的
而动态MFC库使用的是Multi-threadedDLL(/MD)
由于XP对于PE文件格式监测更加严格.
就会导致部分使用多线程DLL的可执行文件在调用的时候出错
修改项目属性的编译开关
Project->Property->configurationProperties->C/C++->CodeGeneration->RuntimeLibrary
修改成Multi-threaded(/MT)
修改了Runtime类型以后
需要将MFC的编译类型也改成静态库
Project->Property->configurationProperties->General->UseofMFC
修改成UseMFCinaStaticLibrary
一部分情况下在这步就能解决问题
另外一部分情况会遇见如下情况
编译器报错
Copycode
nafxcw.lib(afxmem.obj):errorLNK2005:"void*__cdecloperatornew[](unsignedint)"(??_U@YAPAXI@Z)alreadydefinedinlibcpmt.lib(newaop.obj)
产生这个问题的原因是库依赖关系
在Project->Property->configurationProperties->Linker->CommandLine
加入编译开关/verbose:lib可以显示详细的库链接顺序
Copycode
------Buildstarted:Project:PerfMonDemo,Configuration:ReleaseWin32------
Linking...
Searchinglibraries
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\pdh.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\lib\DelayImp.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\lib\libcpmt.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\atlmfc\lib\nafxcw.lib:
nafxcw.lib(afxmem.obj):errorLNK2005:"void*__cdecloperatornew[](unsignedint)"(??_U@YAPAXI@Z)alreadydefinedinlibcpmt.lib(newaop.obj)
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\lib\libcmt.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\kernel32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\user32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\gdi32.lib:
Searchin
gd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\msimg32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\comdlg32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\winspool.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\advapi32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\shell32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\comctl32.lib:
Searchingd:\ProgramFiles\M