-xiaomi-

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

 

分类:

技术点:

相关文章:

  • 2021-08-27
  • 2021-09-30
  • 2021-12-01
  • 2021-11-07
  • 2021-05-10
  • 2021-11-22
  • 2021-05-12
  • 2021-12-31
猜你喜欢
  • 2021-12-04
  • 2021-06-09
  • 2021-08-20
  • 2022-01-14
  • 2021-10-08
  • 2021-06-01
  • 2021-07-18
相关资源
相似解决方案