[Mac操作系统10.13.2、Xcode9.2]
铿锵有一面旗帜-stdlib
其中,根据双方clang++ -cc1 --help
(与...一样clang -cc1 --help
)和LLVM 文档页面 https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-stdlib,允许指定C++ standard library to use
.
1)这个标志对编译有何影响? IE。它是否改变库包含路径等的顺序?
2) 该标志如何影响链接? IE。这只是供应的捷径/替代方案吗-lc++
?
我真的很想了解这个标志的细节,因为我找不到任何描述它的精确行为的文档,并且自 Xcode9 升级以来它对我们的构建系统造成了严重破坏。包含-stdlib=libc++
在我们的 Makefile 中由于头文件问题导致编译失败,但是,当-stdlib=libc++
被省略,我们的项目编译得很好(大概是因为libc++
是 Mac OS 默认的标准 C++ 库)。该项目链接针对libc++
由于其他链接器标志-lc++
and -lsupc++
.
有关我们用例的一些背景信息
我们使用 Clang 交叉编译为-march=i686 -target i686-linux-elf
目标。在 Xcode9 更新之前,我们的构建系统运行良好。自升级以来,我们遇到了编译器错误,例如:
/usr/local/our-target/sysroot/usr/local/include/c++/v1/stdlib.h:111:82: error: use of undeclared identifier 'labs'; did you mean 'abs'?
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) _NOEXCEPT {return labs(__x);}
我现在已经能够通过更改标头包含路径来解决此问题。也就是说,我删除了对 libc++ 和 gcc4.8.5 包含的父文件夹的路径引用。
# -I${STAGING.nao}/usr/local/include/c++ \
-I${STAGING.nao}/usr/local/include/c++/v1
我仍然对了解该标志的详细功能非常感兴趣。