clang和__float128错误/错误

时间:2012-11-23 09:02:19

标签: c++ llvm clang

我已经成功编译了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.

4 个答案:

答案 0 :(得分:22)

你可以用以下方法修复它:

CXXFLAGS+="-D__STRICT_ANSI__"

答案 1 :(得分:5)

我认为clang不支持__float128可能long doubleclang中的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的解决方案无效。

当然这是一个黑客,你必须是安全的。我只想进行一些实验,所以不会造成任何麻烦。