为什么/ MD是编译器的选项?不是链接器的?

时间:2012-03-15 19:05:57

标签: c++ compiler-construction linker crt

  

可能重复:
  Why is runtime library a compiler option rather than a linker option?

我不明白为什么我必须选择RTL的类型 在编制阶段?

例如,我创建了一个带选项/ MD的静态库A.lib。 然后我用选项/ MT创建了第二个静态库B.lib。

当我尝试将A.lib和B.lib链接到我的C.exe时 我会得到链接器错误。

但是在编译阶段(创建A.lib和B.lib) 没有任何理由从c或c ++运行时解析符号。

1 个答案:

答案 0 :(得分:1)

使用/MD构建时,编译器使用一组不同的预定义宏,然后使用/MT进行构建。请参阅documentation并注意_MT_DLL等宏。

  

在编译阶段(创建A.lib和B.lib)没有任何理由从c或c ++运行时解析符号。

确实如此,但是如果您包含任何系统标头,那么您的预处理源实际上是不同的,具体取决于您/MD/MT等标记使用, 在编译阶段非常重要。