说说 Windows 编程中 /MT、/MD 的区别

Windows 编程中无法绕开的编译开关 /MT、**/MD** 其实还有一个 /LD,不过后者很少见。之前对这些一直没有一个清晰的概念,所以就查阅了相关资料。算是对这块有了一个粗浅的认识。

其实最直观的资料还属 MSDN

/MT、**/MD** 其实一言以蔽之,就是运行时的库是静态链接还是动态链接。**/MTd/MDd** 是他们的 debug 版本。所以他们的选择最直接的就是影响生成文件的大小。静态链接显然会大,动态链接则要求目标机器有需要的运行时库文件。其实我见过的大部分应用还是选择 /MD 比较多,因为在它们的安装目录下会看到 MSVCRTXXX.dll 。显然是带了运行时库的。

/LD 是创建一个 DLL。如果以 /LD 编译,代码中没有写 DLL 入口点,编译器会自动插入一个入口点。值得一提的是这个编译开关默认是 /MT。 除非显式定义 /MD