0

尝试从https://github.com/ldionne/hana最新来源(截至今天)编译 Boost.Hana 库。期间发生崩溃make examples。是最新的源-编译器组合有问题,还是我没有真正安装所需的编译器版本(Hana 需要 Clang 中的一些最新错误修复)?我对 OS X 还很陌生,所以在设置编译器和库时有些吃力,并且不知道如何正确配置 cmake 以使用新安装的 clang 进行构建。

我已经通过 Homebrew 安装了 clang:

brew install --HEAD llvm --with-clang

当我尝试只使用新安装的编译器时,构建失败,因为它找不到“cstdio”标头。

所以我还从 github 克隆了“libcxx”并更改了 CMakeCache.txt 中的设置:

CMAKE_CXX_FLAGS:STRING=-Wall -std=c++11 -stdlib=libc++ -I/Users/yacoder/github/libcxx/include/

这是我现在在崩溃输出中得到的引用make examples

0.  Program arguments: /usr/local/Cellar/llvm/HEAD/bin/clang -cc1 -triple x86_64-apple-macosx10.9.0 -emit-obj -mrelax-all -disable-free -main-file-name is_a.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 241.8 -dwarf-column-info -coverage-file /Users/yacoder/github/hana/build/example/CMakeFiles/example.core.is_a.dir/core/is_a.cpp.o
-resource-dir /usr/local/Cellar/llvm/HEAD/bin/../lib/clang/3.6.0 -I /Users/yacoder/github/libcxx/include/ -I /Users/yacoder/github/hana/include -stdlib=libc++ -stdlib=libc++ -Wall
-W -Wall -Wextra -Wno-long-long -Wno-unused-local-typedefs -Wno-unused-parameter -Wwrite-strings -pedantic -std=c++1y -fdeprecated-macro -fdebug-compilation-dir /Users/yacoder/github/hana/build/example -ferror-limit 19
-fmessage-length 177 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.9.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o CMakeFiles/example.core.is_a.dir/core/is_a.cpp.o -x c++ /Users/yacoder/github/hana/example/core/is_a.cpp
1.  /Users/yacoder/github/hana/example/core/is_a.cpp:51:5: current parser token ')'
2.  /Users/yacoder/github/hana/example/core/is_a.cpp:26:12: parsing function body 'main'
3.  /Users/yacoder/github/hana/example/core/is_a.cpp:26:12: in compound statement ('{}') clang: error: unable to execute command: Segmentation fault: 11 clang: error: clang frontend command failed due to signal (use -v to see invocation) clang version 3.6.0 (trunk) Target: x86_64-apple-darwin13.4.0
4

1 回答 1

3

只要您使用该--HEAD版本,通过 Homebrew 安装 Clang 应该可以正常工作。在构建 Clang 时,请确保在 Release 模式下构建;否则某些测试将触发 Clang 中的断言(这些错误是很久以前报告的)。我认为 Release 版本是 Homebrew 的默认版本,因此您无需在此处执行任何操作。

然后,您还需要最新版本的 libc++。像你一样添加包含路径就可以了。但是,Hana 需要使用 -std=c++1y 而不是 std=c++11 进行编译。Hana 已经将它需要的标志传递给编译器,所以如果你让它们保持原样,你应该没问题,除了需要为你的 libc++ 修改的包含路径。

最后,您应该使用make -k而不是make. 这指示make即使出现错误也要继续进行。问题是 Clang 主干仍然有几个与 C++14 相关的错误,导致它在某些测试中出现段错误/断言/爆炸。特别是core/example/is_a.cpp在过去一周左右时断时续地失败了。总而言之,您应该在运行测试时预期 3-4 个断言。这很糟糕,但是 Clang 的人已经意识到了这些问题。

TL;博士

尝试以下操作:

> cd root/of/hana
> mkdir build && cd build
> CXX=path/to/clang/binary cmake .. -DCMAKE_CXX_FLAGS="-I path/to/libc++"
> make -k

如果您使用 Homebrew 安装 Clang,path/to/clang/binary可能类似于/usr/local/opt/llvm/bin/clang++.

于 2014-10-20T01:03:51.703 回答