[Mac OS 10.13.2、Xcode9.2]
Clang 有一个标志-stdlib
,根据clang++ -cc1 --help
(与 相同clang -cc1 --help
)和LLVM 文档页面,该标志允许指定C++ standard library to use
.
1) 这个标志对编译有什么影响?即它是否改变了库包含路径等的顺序。
2)这个标志如何影响链接?即它只是供应的捷径/替代方案-lc++
吗?
我真的很想了解这个标志的细节,因为我找不到任何描述它精确行为的文档,而且自从 Xcode9 升级以来,它对我们的构建系统造成了严重破坏。-stdlib=libc++
由于头文件问题,包含在我们的 Makefile 中会导致编译失败,但是,当-stdlib=libc++
省略时,我们的项目编译良好(大概是因为libc++
是 Mac OS 默认的标准 C++ 库)。针对该项目的链接libc++
由于其他连接标志-lc++
和-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);}
Run Code Online (Sandbox Code Playgroud)
我现在已经能够通过更改标头包含路径来解决这个问题。即我已经删除了对 libc++ 和 gcc4.8.5 包含的父文件夹的路径引用。
# -I${STAGING.nao}/usr/local/include/c++ \
-I${STAGING.nao}/usr/local/include/c++/v1
Run Code Online (Sandbox Code Playgroud)
我仍然对了解标志的作用的细节很感兴趣。
归档时间: |
|
查看次数: |
4308 次 |
最近记录: |