15

我已经成功编译了当前 3.3 的 clang 分支。但是随后任何文件的 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

4 回答 4

22

您可以使用以下方法修复它:

CXXFLAGS+="-D__STRICT_ANSI__"
于 2012-12-09T21:53:36.093 回答
5

我觉得不clang支持__float128。它可能long double与(其中 16 个字节)的类型相同,clang因此它可能是插入的简单情况:

#define __float128 long double

或者:

typedef long double __float128;

在您的包含链中的某个位置。

我不保证它会起作用,但它可能会起作用,而且最好尝试一下,而不是等到clang开始支持更多gcc扩展。

要么,要么切换到gcc,如果这是一个选项。我很确定它gcc支持所有gcc扩展:-)

于 2012-11-23T09:17:50.977 回答
4

有关可能的解决方法,请参阅http://llvm.org/bugs/show_bug.cgi?id=13530#c3

于 2013-06-12T00:43:46.707 回答
2

解决方案是拥有此声明。它就像一个魅力:

#ifdef __clang__
typedef struct { long double x, y; } __float128;
#endif

由于模板规范重新声明错误,解决方案#define不起作用。

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

于 2012-11-23T09:34:05.233 回答