请告诉我我是如何理解编译器标志的:
-MT - 告诉编译器使用静态 CRT 编译代码
-MTd - 告诉编译器在调试模式下使用静态 CRT 编译代码
-MD - 告诉编译器使用动态 CRT 编译代码
-MDd - 告诉编译器在调试模式下用动态 CRT 编译代码
我的问题是,如果 CRT 库 - Visual Studio 附带,那么理论上使用 MD 和 MDd 标志编译的代码 - 不应该在未安装 VS 的 Windows 上运行?
但事实上,在没有安装Visual Studio的Windows上,MDd调试模式下编译的exe文件没有启动,Windows写入一些文件丢失。
这是在发布时编译的代码,但仍然是动态 MD - 它开始时没有问题。
但为什么 ?
通过 MD 链接的 CRT 作为 Visual Studio Redistributable 包和(部分)作为系统组件分发。链接到 MDd 的那个是不可再分发的。在这两种情况下,都可以将必要的库放入包含可执行文件的文件夹中。