关于链接lib文件的一些注意事项
注意代码生成的四个选项MD,MDd,MT,MTd,分别代表的是多线程dll(链接libcmt),多线程dll调试模式,多线程静态链接(链接MSVCRT.LIB),多线程静态链接调试模式。
开关
|
对应的库
|
版本
|
/MD
|
MSVCRT.LIB
|
多线程DLL的Release版本
|
/MDd
|
MSVCRTD.LIB
|
多线程DLL的Debug版本
|
/MT
|
LIBCMT.LIB
|
多线程静态链接的Release版本
|
/MTd
|
LIBCMTD.LIB
|
多线程静态链接的Debug版本
|
/clr
|
MSVCMRT.LIB
|
托管代码和非托管代码混合
|
/clr:pure
|
MSVCURT.LIB
|
纯托管代码
|
在使用LIB进行文件的链接操作时,可能会产生一系列的错误,诸如符号重定义
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.dll)
MSVCRT.lib(MSVCR80.dll) : error LNK2005:已经在 LIBCMT.lib中定义
MSVCRT.lib _this_call 与xxxx.OBJ冲突
产生这一问题的原因是,所链接的lib与当前程序的代码生成模式不一样,也就是链接的底层CRT库不一样,导致重复链接,在符号解析和重定位时产生错误。
解决办法:在生成lib文件时,注意选择代码生成方式,选定后再在程序的链入端,选择相应的代码生成方式。