MacPorts没有使用自己的标题

时间:2015-06-10 13:19:36

标签: c++ macos clang macports include-path

我试图让emscripten在OS X 10.8上工作,请参阅this post了解相关问题。显然Xcode附带的clang++版本太旧了,所以我最近使用MacPorts得到了一个clang 3.7.0。我甚至告诉CMake使用该编译器(在命令行上传递-DCMAKE_CXX_COMPILER=clang++-mp-3.7),但它仍然失败:

[ 33%] Building CXX object CMakeFiles/optimizer.dir/parser.cpp.o
/opt/local/bin/clang++-mp-3.7    -std=c++11 -fno-exceptions -fno-rtti -O3 -DNDEBUG
  -o CMakeFiles/optimizer.dir/parser.cpp.o
  -c …/emsdk/emscripten/master/tools/optimizer/parser.cpp
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.cpp:2:
In file included from …/emsdk/emscripten/master/tools/optimizer/parser.h:12:
…/emsdk/emscripten/master/tools/optimizer/istring.h:3:10: fatal error: 
      'unordered_set' file not found
#include <unordered_set>
         ^
1 error generated.

我可以通过从命令行启动编译器来重现该问题。在并行构建模式下,有时它反而抱怨<cstdint>optimizer.cpp。这两个标头都存在于/opt/local/libexec/llvm-3.7/include/c++/v1/

  • 使用macports安装的clang++版本(包括其标题)的规范方法是什么?我是否必须使用-I并完成整个路径,或者是否有更短的内容?
  • 我可以安全地执行此操作,而无需将运行时库切换到MacPorts附带的库中。铛?如果没有,我可以以某种方式将运行时库的完整路径编码到创建的二进制文件中,无论是针对该单个库还是使用-rpath参数ld或某些等效替代方案? 更新:当我手动指定include目录后尝试链接东西时,我得到了未解析的符号,我不知道如何解决这个问题。除自述文件外,MacPorts中的libcxx包是空的。

1 个答案:

答案 0 :(得分:1)

我通过向环境添加CXXFLAGS=--stdlib=libc++解决了原始问题。那么即使系统版本的clang也会做我需要的一切。该标志对于MacPorts的clang版本也是神奇的:指定我获得了成功的构建,我甚至可以验证(使用-E编译器开关)它使用我之前提到的标题。我仍然不确定是否有任何东西可以确保标题符合系统的libc++版本。