0. 前言
在MSVC工程上右键->属性,找到配置属性->C/C++->代码生成->运行库,会发现有好几种选项:MT MTd MD MDd

这是对于多线程程序生成对象链接内容的控制。
先理解一下这四个有什么不同:
- 首先后面带
d表示Debug,生成对象(exe、lib都行)是带有调试信息的,生成对象占用空间相比不带d的会更大一些; MT和MD区别:前者是静态链接,将有关依赖库都打包进生成对象了,所以占用空间更大;后者是动态链接,运行时依赖电脑环境,容易出现换个电脑报错dll的现象。
这个出问题常见于依赖某个lib文件时,弹出LNK2038错误:

一般因为VS工程默认是MD/MDd,即动态链接方式,而一些库在生成时采用的是MT/MTd方式(如GoogleTest)
CMake设置MT/MD多线程运行库策略与set_property详解

本文详细介绍了如何在MSVC工程中通过CMakeLists.txt设置CMAKE_POLICY CMP0091以管理MT/MD运行库标志,并使用set_property设置MSVC_RUNTIME_LIBRARY属性,解决混合使用MT/MD库导致的LNK2038错误。
最低0.47元/天 解锁文章
1361

被折叠的 条评论
为什么被折叠?



