【发布时间】:2015-07-24 22:23:04
【问题描述】:
我遇到了一个奇怪的问题,我需要使用 gcc 和 clang 特定模块访问 boost 库(这些程序交互。一个是 gcc/g++ 独有的,一个是 clang 独有的)。有什么方法可以构建 boost 以便两个模块在调用 boost 时访问相同的位置,但 boost 能够促进 gcc 或 clang 特定的请求?
【问题讨论】:
我遇到了一个奇怪的问题,我需要使用 gcc 和 clang 特定模块访问 boost 库(这些程序交互。一个是 gcc/g++ 独有的,一个是 clang 独有的)。有什么方法可以构建 boost 以便两个模块在调用 boost 时访问相同的位置,但 boost 能够促进 gcc 或 clang 特定的请求?
【问题讨论】:
这是可能的,但你是否真的应该这样做是值得怀疑的。
您必须选择将libc++ 或libstdc++ 与这两种编译器一起使用。
libstdc++ 绝对是更好的,因为 clang 可以完美地处理它,
gcc 在解析多个 libc++ 标头时遇到问题。
这样的事情应该让 clang 在 Mac OS X 上使用 gcc 的 libstdc++。
clang++ \
-stdlib=libstdc++ \
-nostdinc++ \
-Qunused-arguments \
-nodefaultlibs \
<path to>x86_64-apple-darwin14/lib/libstdc++.a \
<path to>x86_64-apple-darwin14/lib/libsupc++.a \
<path to>lib/gcc/x86_64-apple-darwin14/5.2.0/libgcc.a \
<path to>lib/gcc/x86_64-apple-darwin14/5.2.0/libgcc_eh.a \
-lc \
-Wl,-no_compact_unwind \
-cxx-isystem <path to>x86_64-apple-darwin14/include/c++/5.2.0 \
-cxx-isystem <path to>x86_64-apple-darwin14/include/c++/5.2.0/x86_64-apple-darwin14 \
-mmacosx-version-min=10.7.0
我建议把它放在一个包装脚本中,然后传递CXX=clang++-libstdc++
到 boost 构建脚本。
示例包装脚本:
#!/bin/sh
ls -l "$@"
包装 ls。
【讨论】: