昏天黑地MTd,MDd链接选项
来源:互联网 发布:怎么做软件视频教程 编辑:程序博客网 时间:2024/06/14 16:43
在Windows下有六种类型CRTLib(C运行库):
Reusable Library Switch Library Macro(s) Defined
----------------------------------------------------------------
Single Threaded /ML LIBC (none)
Static MultiThread /MT LIBCMT _MT
Dynamic Link (DLL) /MD MSVCRT _MT and _DLL
Debug Single Threaded /MLd LIBCD _DEBUG
Debug Static MultiThread /MTd LIBCMTD _DEBUG and _MT
Debug Dynamic Link (DLL) /MDd MSVCRTD _DEBUG, _MT, and _DLL
首先,一定要清楚,这些符号都是指:在链接C运行库(CRT)时的不同选择!
其次,MT和MD都适用于多线程,其区别是:
MT为静态链接CRT,这样编译出来exe是自包含的,所以会相对大一些,但运行时不用再load CRT库。
MD为动态链接CRT,编译出来exe会小一些,运行时需要load CRT,性能有一点点损失。
任何工程都应该使用同样的CRT Library。即要么都是/ML,要么都是/MTD, 如此类推。
如果一个程序中混合使用不同类型的CRT,有时可以通过link,这样会存在不同CRT的copy,并导致以下问题:
1)在一个lib中new出来内存,在另一个lib中delete,会crash。
2)不能在多个lib中共享file handle。
3)一个lib中设置locale(本地化有关),不能在另一个lib中起作用。
当工程比较大,包含的lib很多,特别当有外部lib(Third party library)存在时,link很容易发生下面这样的错误。
LIBCMTD.lib(chsize.obj) : error LNK2005: __chsize already defined in MSVCRTD.lib(MSVCRTD.dll)
这说明,你的工程使用了不同类型的CRT。这个时候首先一定要坚信这个原则:整个工程用同样的CRT Lib就可以解决问题。然后耐心一一检查每个lib。
如果恰恰某个外部lib用MT,另一个用MD,这个时候就比较痛苦。如果有他们源码,就编译一个MT or MD类型的lib,以统一使用一个类型CRT。如果没有,那可能只好选择其他的lib。
- 昏天黑地MTd,MDd链接选项
- 昏天黑地MTd,MDd链接选项
- VC编译选项 /MT /MTd /MD /MDd
- VC编译选项 MT MTd MD MDd
- mtd mdd
- VC编译选项 MT MTd MD MDd 全面分析
- VC编译选项 MT MTd MD MDd 全面分析
- VC编译选项/MT/MTd/MD/MDd说明
- VC编译选项/MT/MTd/MD/MDd说明
- VC编译选项md /mdd /ml /mt/mtd
- windows编程vs编译器-mdd、mtd编译选项的区别
- VS编译选项中的MT,MTD,MD,MDD
- /MTd /MD /MDd
- /MD /MDd /MT /MTd
- MT、MTd、MD、MDd
- /mt /mtd md /mdd
- MT MTd MD MDd
- VC编译选项 /ML /MLd /MT /MTd /MD /MDd之间的区别
- ASCII 表
- VC2005 + SQLite 3.6.3 编译、测试开发手记
- 酒场规则
- Microsoft.Office.Interop.Word 创建word
- hibernate使用list进行多对多关联时中间表的主键策略
- 昏天黑地MTd,MDd链接选项
- C# Excel 行高,列宽,合并单元格,单元格边框线,冻结
- 共享内存
- AIX 常用命令
- 重定位类型分析(3)
- Lotus CGI 变量表及其用法
- 把项目设为tomcat首页
- Django 缓存框架
- 流水光年