C++11 Clang 3.6.0试图编译时崩溃;hana/example/core/is“a.cpp”;

C++11 Clang 3.6.0试图编译时崩溃;hana/example/core/is“a.cpp”;,c++11,clang,homebrew,boost-hana,C++11,Clang,Homebrew,Boost Hana,正在尝试从最新来源编译Boost.Hana库(截至今天)。在过程中发生崩溃,请举例说明。这是最新的源代码编译器组合的问题,还是我还没有真正安装所需的编译器版本(Hana需要在Clang中进行一些最新的bug修复)?我对OSX还比较陌生,所以在设置编译器和库方面有点困难,并且不知道如何正确配置cmake以使用新安装的clang进行构建 我已通过自制软件安装了clang: brew install --HEAD llvm --with-clang 当我尝试仅使用新安装的编译器进行编译时,构建失败,

正在尝试从最新来源编译Boost.Hana库(截至今天)。在
过程中发生崩溃,请举例说明。这是最新的源代码编译器组合的问题,还是我还没有真正安装所需的编译器版本(Hana需要在Clang中进行一些最新的bug修复)?我对OSX还比较陌生,所以在设置编译器和库方面有点困难,并且不知道如何正确配置cmake以使用新安装的clang进行构建

我已通过自制软件安装了clang:

brew install --HEAD llvm --with-clang
当我尝试仅使用新安装的编译器进行编译时,构建失败,因为它找不到“cstdio”头

因此,我还从github克隆了“libcxx”,并更改了cmakcache.txt中的一个设置:

CMAKE_CXX_FLAGS:STRING=-Wall -std=c++11 -stdlib=libc++ -I/Users/yacoder/github/libcxx/include/
下面是我现在在
示例制作过程中获得的崩溃输出的一段引文:

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

只要您使用
--HEAD
版本,通过自制程序安装Clang应该可以正常工作。在构建Clang时,一定要确保在发布模式下构建;否则,一些测试将触发Clang中的断言(这些bug早就被报告了)。我认为发布版本是自制软件的默认版本,因此您在这里没有操作

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

最后,应该使用
make-k
而不是
make
。这指示
make
即使出现错误也要继续。问题是,ClangTrunk仍然有几个与C++14相关的bug,导致它在一些测试中出现segfault/assert/explode。特别是,
core/example/is_a.cpp
在过去一周左右的时间里断断续续地出现故障。总之,在运行测试时,您应该期望3-4个断言。这很糟糕,但是那些叮当作响的家伙已经意识到了这些问题

TL;博士 请尝试以下操作:

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

如果使用自制软件安装Clang,
path/to/Clang/binary
可能类似于
/usr/local/opt/llvm/bin/Clang++
只要使用
--HEAD
版本,通过自制软件安装Clang应该可以正常工作。在构建Clang时,一定要确保在发布模式下构建;否则,一些测试将触发Clang中的断言(这些bug早就被报告了)。我认为发布版本是自制软件的默认版本,因此您在这里没有操作

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

最后,应该使用
make-k
而不是
make
。这指示
make
即使出现错误也要继续。问题是,ClangTrunk仍然有几个与C++14相关的bug,导致它在一些测试中出现segfault/assert/explode。特别是,
core/example/is_a.cpp
在过去一周左右的时间里断断续续地出现故障。总之,在运行测试时,您应该期望3-4个断言。这很糟糕,但是那些叮当作响的家伙已经意识到了这些问题

TL;博士 请尝试以下操作:

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

如果使用自制软件安装Clang,
path/to/Clang/binary
可能类似于
/usr/local/opt/llvm/bin/Clang++
只要使用
--HEAD
版本,通过自制软件安装Clang应该可以正常工作。在构建Clang时,一定要确保在发布模式下构建;否则,一些测试将触发Clang中的断言(这些bug早就被报告了)。我认为发布版本是自制软件的默认版本,因此您在这里没有操作

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

最后,应该使用
make-k
而不是
make
。这指示
make
即使出现错误也要继续。问题是,ClangTrunk仍然有几个与C++14相关的bug,导致它在一些测试中出现segfault/assert/explode。特别是,
core/example/is_a.cpp
在过去一周左右的时间里断断续续地出现故障。总之,在运行测试时,您应该期望3-4个断言。这很糟糕,但是那些叮当作响的家伙已经意识到了这些问题

TL;博士 请尝试以下操作:

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

如果使用自制软件安装Clang,
path/to/Clang/binary
可能类似于
/usr/local/opt/llvm/bin/Clang++
只要使用
--HEAD
版本,通过自制软件安装Clang应该可以正常工作。在构建Clang时,一定要确保在发布模式下构建;否则,一些测试将触发Clang中的断言(这些bug早就被报告了)。我认为发布版本是自制软件的默认版本,因此您在这里没有操作

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

最后,应该使用
make-k
而不是
make
。这说明