我有一个包含 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++
不起作用之类的选项。