我试图让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/
。
clang++
版本(包括其标题)的规范方法是什么?我是否必须使用-I
并完成整个路径,或者是否有更短的内容?-rpath
参数ld
或某些等效替代方案?
更新:当我手动指定include目录后尝试链接东西时,我得到了未解析的符号,我不知道如何解决这个问题。除自述文件外,MacPorts中的libcxx
包是空的。答案 0 :(得分:1)
我通过向环境添加CXXFLAGS=--stdlib=libc++
解决了原始问题。那么即使系统版本的clang也会做我需要的一切。该标志对于MacPorts的clang
版本也是神奇的:指定我获得了成功的构建,我甚至可以验证(使用-E
编译器开关)它使用我之前提到的标题。我仍然不确定是否有任何东西可以确保标题符合系统的libc++
版本。