VS属性设置_MT、MD、MF、CSystem32 和 SysWow64

一. LIBCMTD.lib msvcrd.lib 库冲突

VS 工程–>属性—>链接器–>命令行:添加: /NODEFAULTLIB:MSVCRTD (作用:忽略MSVCRTD库)

二. mt md mtd mdd 编译选项

对应为属性 -> C/C++ -> 代码生成 -> 运行时库

动态运行时库(MD/MDd)主要包括:

·DLL库文件:msvcrt.dll(或 MSVCRTD.DLL for debug build)
·对应的Import Library文件:MSVCRT.LIB(或 MSVCRTD.LIB for debug build)
上面为vc6.0编译器用到的库,在vs中为msvcr100.dll等

静态运行时库(MT/MTd)

静态运行时库(release版)对应的主要文件包括:
LIBC.LIB(Single thread static library, retail version)
LIBCMT.LIB(Multithread static library, retail version)
不同编译器实现的库名都相同,都为libcmt.lib,调试版为libcmtd.lib。

MT、/MTd、/MD、/MDd各选项区别

MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库(LIBCMT.LIB、LIBC.LIB)集成到程序中,程序体积会变大。
MTd选项:LIB的调试版。
MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行(需添加MSVCPxx.DLL、MSVCRxx.DLL)。
MDd选项:表示使用DLL的调试版。

MT、/MTd、/MD、/MDd对应的库文件

MD:
使应用程序使用运行时库的多线程并特定于DLL 的版本。定义 _MT 和 _DLL,并使编译器将库名MSVCRT.lib 放入 .obj文件中。

MDd:
定义_DEBUG、_MT 和 _DLL,并使应用程序使用运行时库的调试多线程并特定于 DLL 的版本。它还使编译器将库名MSVCRTD.lib 放入 .obj 文件中。

MT:
使应用程序使用运行时库的多线程静态版本。定义_MT 并使编译器将库名LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib解析外部符号。

MTd:
定义_DEBUG 和 _MT。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用LIBCMTD.lib 解析外部符号。

(注:使用MT可以减少对很多VS自带库的潜在依赖,但是采用MT时,自身所引用的lib等都要采用相同的编译方式得来,即所有模块的生成方式应当保持一致性。)

三.在静态库中使用 MFC,在动态库中使用MFC,使用标准0Windows库 区别

  1. 在共享DLL中使用MFC: 指打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。

  2. 在静态库中使用MFC: 将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行。

  3. “使用标准Windows库” 选项只能用在非MFC工程中,如果用在MFC工程会导致代码编译报错。

    对应为属性 -> 配置属性 -> 常规 -> MFC的使用

    选择在共享中使用MFC 对应的代码生成库应选择MD/MDd

    选择在静态库中使用MFC 对应的代码生成库应选择MT/MTd

    (注:带d 为debug调试版)

四. System32 和 SysWow64的区别 --在64位系统下

Wow64,全称是32bit Windows On 64bit Windows(64位Windows上的32位Windows)

System32存放32位与64位的DLL
WOW64存放Wow64.dll、Wow64win.dll、Wow64cpu.dll三个库来支持64位系统支持32位的程序(考虑了兼容性)
(PS:SYSTEM和SYSTEM32两个文件夹,分别用来存放16位和32位的DLL文件)

1、32位的Windows操作系统可以同时运行32位和16位代码,而64位Windows操作系统可以直接运行64位代码,同时通过使用WoW64(Windows on Windows 64)也能运行32位代码。

2、32位版本的Windows在如何允许32为和16位代码并肩运行方面有着很复杂的机制,然而64位版本的Windows就不同了,32位代码与64位代码单独运行,有着两个Program Files,有着system32和syswow64两个DLL文件夹,甚至两个注册表。

3、在32位操作系统的Windows文件夹中,SYSTEM和SYSTEM32两个文件夹,分别用来存放16位和32位的DLL文件。

现在的软件大多是32位软件,所以默认会将DLL文件放到System32文件夹中,而微软为了保障兼容性,所以无论是32位还是64位的DLL文件都是放到了System32文件夹中。

那SysWoW64文件夹是因为32位软件并不能在64位系统中直接运行,所以微软设计了WoW64(Windows-on-Windows 64-bit),通过Wow64.dll、Wow64win.dll、Wow64cpu.dl三个DLL文件进行32位和64位系统的切换来运行32位软件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值