关于链接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文件时,注意选择代码生成方式,选定后再在程序的链入端,选择相应的代码生成方式。

 

posted @ 2012-06-20 09:09  晒米的猫  阅读(397)  评论(0编辑  收藏  举报