什么是clang相当于--no-undefined gcc标志?

Posted

技术标签:

【中文标题】什么是clang相当于--no-undefined gcc标志?【英文标题】:What is clang's equivalent to --no-undefined gcc flag? 【发布时间】:2014-11-17 11:08:10 【问题描述】:

我正在尝试使用 clang 在 Mac OS X 上构建一个项目,但它在与ld: unknown option: --no-undefined 的链接步骤中失败了,这是用 gcc 构建的。 此选项的 clang 等效项是什么? (请不要建议使用 gcc 而不是 clang。)

还有一个更通用的问题,是否有任何资源可以找到 gcc 和 clang(链接器)选项差异之间的某种“映射”?

谢谢。

【问题讨论】:

这是一个链接器选项。使用 -Wl,... 并阅读链接器的文档 (ld)。使用 gcc,您可以添加 -v 以查看它实际传递给链接器的选项。 【参考方案1】:

OS X 使用不同的linker。正如@rubenvb 指出的那样,它可能是来自Apple's binutils 的那个。如果你运行man ld,然后搜索“undefined”,你会找到这个选项:

-未定义的处理 指定如何处理未定义的符号。选项有:error、warning、suppress 或 dynamic_lookup。默认为错误。

因此,将-Wl,--no-undefined 替换为-Wl,-undefined,error。另外,请使用原力,卢克。

【讨论】:

你确定 OS X 使用 LLVM 的 lld 而不是 Apple's binutils? @rubenvb 你比我“受过教育”的猜测更有可能是对的 :) ld -v 说它使用 LLVM3.5 进行 LTO。我对它的阅读比我应该阅读的要多。从答案中删除该部分。如果您不介意,请使用正确的信息对其进行编辑。 您的回答与目前的情况一样,但为了完整起见,请提供指向 the status section on the lld website 的链接。 感谢@Pradhan 的提示。我的坏,没想到调查老男人。它进行了一项更正:必须使用-Wl,-undefined,error - 否则它会因clang: error: no such file or directory: 'error' 而失败。

以上是关于什么是clang相当于--no-undefined gcc标志?的主要内容,如果未能解决你的问题,请参考以下文章

gcc编译器选项-Wl,--no-undefined(告诉链接器在链接过程中不允许有未定义的符号)(gcc编译器和链接器是分离的工具,它们需要通过选项来进行通信)

clang 是不是有相当于 GCC 的 -mno-vzeroupper 标志?

Clang 相当于 GCC 的 __builtin_darn()

FreeBSD 为啥要废弃 GCC 改用 Clang/LLVM

mac 使用gcc 为啥编译错误是clang 提示

gcc有薄lto吗?