VC2005中C运行时库选择不当导致的链接问题及解决方案
在Microsoft Visual C++ 2005中,如果一个EXE主工程应用程序要使用一个或几个静态LIB库,那么链接时经常会遇到符号重复定义的错误,如果排除库不当又会遇到找不到某些符号的问题,如果强制使用 /force选项链接过去又可能发生一些意想不到的运行时问题。
如何完美解决这个问题呢?只需要按照如下步骤进行即可:
1、确保所有LIB工程与EXE主工程的活动配置的如下配置项完全一致:
ü 配置属性->常规->项目默认值->MFC的使用
ü 配置属性->常规->项目默认值->字符集
ü 配置属性->C/C++->代码生成->运行时库
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 |
忽略默认库的方法是在如下位置填写要忽略的库:
配置属性->链接器->输入->忽略特定库
条目之间以分号隔开。
经过上面两步,此类问题基本可以解决。