VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

Posted wuyuan2011woaini

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结相关的知识,希望对你有一定的参考价值。

原文链接地址:https://blog.csdn.net/ithzhang/article/details/13170047

MSDN中对于在不同的配置下Link的LIB作了说明:

C Runtime Library:

开关

对应的库

版本
/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

纯托管代码

 

C++ Standard Library:

开关

对应的库

版本
/MD MSVCPRT.LIB 多线程DLL的Release版本
/MDd MSVCPRTD.LIB

多线程DLL的Debug版本

/MT

LIBCPMT.LIB

多线程静态链接的Release版本

/MTd

LIBCPMTD.LIB

多线程静态链接的Debug版本

编译器会自动根据编译选项,选择对应的LIB文件。一般情况下这不会出现问题。

然而,在部分情况下,一旦你的程序的各个部分(LIB, OBJ…)并非由相同的编译选项编译出,而Link在一起的话,会出现各种各样的看似很难解决的问题,这类问题主要以重复定义的错误形式存在,通常的解决方法也很简单,就是选择同样的编译选项进行编译之后再Link。

以上是关于VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结的主要内容,如果未能解决你的问题,请参考以下文章

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

typedef 结构在链接静态库时会导致名称冲突吗?

vc下DLL项目设置dll和lib库输出路径以及使用lib/dll库时的包含路径

我们可以静态链接动态 C 库吗?

链接静态库时链接器可以省略目标文件吗?

Anaconda 将 C/C++ 链接器与重复库混淆