8

我有一个包含 C 和 C++ 源混合的项目。它目前在 OS X 上使用 GCC 构建。该项目有定制的构建脚本,它们调用gcc命令来编译 C 和 C++ 源代码,并分别调用链接器。

我现在正试图用 Clang 构建它。

调用clang确实可以正确编译源文件;它区分源文件.c.cpp源文件,并在每种情况下编译为适当的语言。不过,我在链接时遇到问题。当链接器被调用为clang时,C++ 运行时库没有被链接进来,由于缺少符号而导致构建错误。

当我设置clang++为构建工具时,我可以成功链接,但这会导致编译时错误和警告;它真的不喜欢用 C++ 编译器编译 C 源代码。

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
...
/usr/include/stdio.h:250:49: error: redefinition of parameter 'restrict'

我必须为构建脚本指定一个工具以用作编译器/链接器,所以我需要做一个简单的替换来clang代替gcc. 有什么办法可以说服clang(不是clang++)与 C++ 运行时库链接吗?

诸如-stdlib=libc++不起作用之类的选项。

4

1 回答 1

12

您应该能够使用普通的链接器标志,就像您对 gcc 所做的一样:clang -lc++或者clang -lstdc++取决于您想要的实现。(你应该想要 libc++)

于 2012-10-17T16:43:34.347 回答