繁体   English   中英

MacPorts Clang不使用自己的标题

[英]MacPorts clang not using its own headers

我正在尝试使emscripten在OS X 10.8上工作,有关此方面的一些相关问题,请参见此文章 显然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.

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

  • 使用macports安装的clang++版本(包括其标头)的规范方法是什么? 我是否必须使用-I并确定完整路径,还是更短?
  • 我可以安全地这样做,而不必同时将运行时库切换为MacPorts的clang附带的库吗? 如果没有,我可以以某种方式将运行时库的完整路径编码为创建的二进制文件,或者针对单个库,或者对ld使用-rpath参数或其他等效方法?
    更新:手动指定include目录后尝试链接内容时出现无法解析的符号,但我不知道如何解决。 除自述文件外,MacPorts的libcxx软件包为空。

通过将CXXFLAGS=--stdlib=libc++到环境中,我已经解决了原始问题。 然后,即使是系统版本的clang也可以满足我的所有需求。 该标志对于MacPorts的clang版本同样有效:指定我构建成功,甚至可以(使用-E编译器开关)验证它是否使用了前面提到的标头。 我仍然不确定是否有任何东西可以确保标题与系统的libc++版本匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM