我已经成功编译了clang的当前3.3分支。但随后任何文件的C ++编译都会因错误/错误而失败。可以修复吗?
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/iostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/ostream:39:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/ios:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/char_traits.h:40:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_algobase.h:65:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_pair.h:61:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/move.h:57:
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/type_traits:256:39: error: use of
undeclared identifier '__float128'
struct __is_floating_point_helper<__float128>
^
1 error generated.
答案 0 :(得分:22)
你可以用以下方法修复它:
CXXFLAGS+="-D__STRICT_ANSI__"
答案 1 :(得分:5)
我认为clang
不支持__float128
。 可能与long double
(clang
中的16个字节)的类型相同,因此它可能是一个简单的插入案例:
#define __float128 long double
或:
typedef long double __float128;
在您的包含链的早期某个地方。
我不保证会有效但可能会有效,而且最好先尝试一下,而不是等到clang
开始支持更多gcc
次扩展。
要么是这样,要么切换到gcc
,如果这是一个选项。我非常确定gcc
支持gcc
扩展程序的所有: - )
答案 2 :(得分:4)
有关可能的解决方法,请参阅http://llvm.org/bugs/show_bug.cgi?id=13530#c3。
答案 3 :(得分:2)
解决方案是拥有此声明。它就像一个魅力:
#ifdef __clang__
typedef struct { long double x, y; } __float128;
#endif
由于模板规范重新声明错误,#define
的解决方案无效。
当然这是一个黑客,你必须是安全的。我只想进行一些实验,所以不会造成任何麻烦。