我正在读/ MT和/ MD,但我有点困惑
HEAR是我不完全理解的:
这是什么意思?/ MT使您的应用程序使用运行时库的多线程静态版本。定义_MT并使编译器将库名称LIBCMT.lib放入.obj文件中,以便链接器使用LIBCMT.lib来解析外部符号。
答案 0 :(得分:3)
如果您与/MD
或/MDd
链接,您的程序将需要CRT dll才能运行。通常,对于C ++运行时,它们被称为msvcp100.dll
,对于C运行时,它被称为msvcr100.dll
。如果使用安装程序部署应用程序,则可以将这些包添加到安装程序中,以便在有人运行应用程序时dll将存在。另一方面,如果您要将应用程序部署为一个独立的exe,那么您的用户将需要这些dll的副本。这些dll的最新版本通常都带有windows本身(不是调试版)但如果你的用户运行的是旧版本的windows,它可能没有所需的dll。
将您的应用程序链接到CRT的静态版本可以省去这个令人头疼的问题,因为exe的价格略高一些(因为它包含了CRT)
如果您使用/MT
(静态CRT),则必须确保您静态链接的所有其他内容也使用/MT
。否则你最终会得到一个可执行文件,其中部分代码使用静态CRT,部分依赖于CRT DLL。除了打破不需要CRT DLL的基本目的外,这也可能导致其他问题
要确保您的exe依赖于哪些DLL,可以使用dependency walker.