VS 运行库MT、MD的区别
2024-08-30 11:19:59
https://www.jianshu.com/p/f43afc1d5946
VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。
目前Win7、Win10等,选择MD问题不大,但是XP等一些比较老的系统需要选择MT
两者的区别
/MT是 "multithread, static version ” 意思是多线程静态的版本,定义了它后,编译器把LIBCMT.lib 安置到OBJ文件中,让链接器使用LIBCMT.lib 处理外部符号。
/MD是 "multithread- and DLL-specific version” ,意思是多线程DLL版本,定义了它后,编译器把 MSVCRT.lib 安置到OBJ文件中,它连接到DLL的方式是静态链接,实际上工作的库是MSVCR80.DLL。
即:
静态运行时库:LIBCMT.lib
动态运行时库:MSVCRT.lib + MSVCR80.DLL
所以,当你用CMAKE生成工程文件时,若CMAKE是用/MT生成的(查看工程原始目录的CMakeLists.txt),则它所调用的运行时库为:LIBCMT.lib,若生成的工程的运行时库(Runtime Library)你选择/MD,则此工程在编译后链接的时候,将会调用动态运行时库:MSVCRT.lib + MSVCR80.DLL,明显,两次对同一个某运行时库里的函数调用的库不同,则会出现重定义的错误。若此工程生成的是库文件,则其他工程调用此库时也必须是/MT。
最新文章
- mysql中profile的使用
- chromium 一些设置 --插件安装
- 【转】linux root用户ifconfig报command not found
- Jsoup 的认识和简单使用
- Python正则表达式2
- UC全屏
- canvas入门
- 关于k-means聚类算法的matlab实现
- Struts1.x教程:配置文件总结
- 有两个数据库A和B,数据库A中有表a,如何把表a映射到数据库B中,sql 2005
- 初探 discuz
- C语言/原子/编译,你真的明白了吗?
- python txt文件的写入和读取
- nmap命令总结
- 第五章Bookstrap
- Shell 文件测试运算符
- 12-openldap使用AD密码
- pgm11
- Django中提供了6种缓存方式
- java EE ME SE有什么关系
热门文章
- js文本公告滚动展示,图片轮播....
- MySQL提供的几种检索行数据的优化方式
- PyCharm Django 显示一个简单页面
- python day1 (afternoon)购物清单
- springboot 整合 web 项目找不到 jsp 文件
- (错误)启动ActiveMQ报错:Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: stomp://0.0.0.0:61613?
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
- testwebsite
- js循环及for-in , for-of的区别
- 树莓派二:apt-get出错、蓝牙、汉化、输入法