VC++ 2005编译出程序在XP下执行出错的解决方法
2007-01-25 16:52
609 查看
2006年09月18日 星期一 02:10
这个问题主要出现在XP环境下运行由Visual C++2003/2005编译的MFC程序时 问题现象是XP运行此类程序时,报错"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题" 这个问题似乎许多人遇见过.在CSDN和微软社区里面都有人提到.但是没有完整的解决方案 这个问题的解决一共会遇见2个子问题 下面是一张可能发生冲突的列表 若要使用此运行时库 请忽略这些库 单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib 调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib 使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib 最早出现这个错误我和许多人认为的一样 认为是缺乏DLL库文件导致.但是在测试机复制了DLL甚至安装了.net framework 2.0以后 都无法解决问题,最后确认不是由缺乏DLL所致 因为程序是纯win32的应用程,非托管代码,所以也无需.net framework Visual C++2003/2005默认的MFC程序是使用动态MFC库(Use MFC in a Shared DLL)来链接的 而动态MFC库使用的是Multi-threaded DLL (/MD) 由于XP对于PE文件格式监测更加严格. 就会导致部分使用多线程DLL的可执行文件在调用的时候出错 修改项目属性的编译开关 Project->Property->configuration Properties->C/C++->Code Generation->Runtime Library 修改成Multi-threaded (/MT) 修改了Runtime类型以后 需要将MFC的编译类型也改成静态库 Project->Property->configuration Properties->General->Use of MFC 修改成Use MFC in a Static Library 一部分情况下在这步就能解决问题 另外一部分情况会遇见如下情况 编译器报错 CODE: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj) [Copy to clipboard] 产生这个问题的原因是库依赖关系 在Project->Property->configuration Properties->Linker->Command Line 加入编译开关/verbose:lib可以显示详细的库链接顺序 CODE: ------ Build started: Project: PerfMonDemo, Configuration: Release Win32 ------ Linking... Searching libraries Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/pdh.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/DelayImp.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/nafxcw.lib: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj) Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/kernel32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/user32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/gdi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/msimg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comdlg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/winspool.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/advapi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shell32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comctl32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shlwapi.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/uuid.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oledlg.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ole32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleaut32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/urlmon.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/OLDNAMES.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/atls.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ws2_32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/mswsock.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleacc.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/pdh.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/DelayImp.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/nafxcw.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/kernel32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/user32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/gdi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/msimg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comdlg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/winspool.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/advapi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shell32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comctl32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shlwapi.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/uuid.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oledlg.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ole32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleaut32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/urlmon.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/OLDNAMES.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/atls.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ws2_32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/mswsock.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleacc.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/pdh.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/DelayImp.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmt.lib: Finished searching libraries Searching libraries Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/pdh.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/DelayImp.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/nafxcw.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/kernel32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/user32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/gdi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/msimg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comdlg32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/winspool.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/advapi32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shell32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/comctl32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/shlwapi.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/uuid.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oledlg.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ole32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleaut32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/urlmon.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/OLDNAMES.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/atls.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/ws2_32.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/mswsock.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/oleacc.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/lib/pdh.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/DelayImp.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/lib/libcpmt.lib: Searching d:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/nafxcw.lib: Finished searching libraries ./Release/PerfMonDemo.exe : fatal error LNK1169: one or more multiply defined symbols found Build log was saved at "file://d:/Dev/Performance Monitor/Release/BuildLog.htm" PerfMonDemo - 2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== [Copy to clipboard] 我们发现在libcpmt.lib声明过的operator new在nafxcw.lib中再次定义 解决方法如下 Project->Property->configuration Properties->Linker->Input->Additional Dependencies 加入 nafxcw.lib libcpmt.lib Project->Property->configuration Properties->Linker->Input->Ignore Specific Library 加入 nafxcw.lib libcpmt.lib 这样链接程序就不会先按照默认顺序来连接这两个库文件 而是在最后在加入对他们的引用.这样就避免了这个问题 下面是一张可能发生冲突的列表 若要使用此运行时库 请忽略这些库 单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib 调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib 使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib |
相关文章推荐
- VC2005程序在XP下出错的解决方法
- VC++2005编译出程序在XP下执行出错的解决方法
- VC2005编译的MFC程序提示“由于应用程序配置不正 确,应用程序未能启动”解决方法(转)
- vs2012编译的程序不能在XP和2003下执行问题的解决方法
- vc2005编译程序成功后运行不了提示“没有找到MSVCP80D.dll...“的解决方法
- 解决不安装VC运行库(VC2005,VC2008),程序运行出错的方法。
- 解决不安装VC运行库(VC2005,VC2008),程序运行出错的方法
- VC++ 2005编译出程序出现“应用程序配置错误”的解决方法
- 部分vc程序编译出错的解决方法
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- Win8系统执行自己Vc编写的程序时回车闪退解决方法。
- VS 2005 编译的程序不能运行的几个解决方法
- 【转】 “由于应用程序配置不正确,程序未能启动”--原因及解决方法 vc2008, VC2005
- 编译Android驱动对应的C测试程序出错的解决方法以及正确流程
- windows 高级程序指南InjectLib在Debug模式下执行出错的解决方法
- 关于vc2005编译asm文件出错的一个处理方法
- FootStep 8、VC6下进行Symbian开发时,非代码问题引起的编译及链接出错的解决方法
- vc2010转化vc2005或低版本VC过程后,编译错误 解决方法
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
- vs2012-vs2013编译出来的程序不能在xp上运行解决方法