【问题标题】:Why /MD is compiler's option? not linker's? [duplicate]为什么 /MD 是编译器的选项?不是链接器的? [复制]
【发布时间】:2012-03-15 19:05:56
【问题描述】:

可能重复:
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++ 运行时解析符号。

【问题讨论】:

标签: c++ compiler-construction linker crt


【解决方案1】:

当您使用/MD 构建时,编译器使用一组不同的预定义宏,而当您使用/MT 构建时。见documentation,关注_MT_DLL等宏。

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

确实如此,但是如果您包含任何系统标头,则您的预处理源实际上是不同,具体取决于您使用的 /MD/MT 等标志中的哪一个,并且 这在编译阶段非常重要。

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 2011-03-07
    • 1970-01-01
    • 2016-12-18
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多