15

私は、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

4 に答える 4

22

あなたはそれを修正することができます:

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

はサポートしていないと思いclangます__float128。と同じタイプ( では 16 バイト) である可能性があるため、以下を挿入する単純なケースである可能性があります。long doubleclang

#define __float128 long double

また:

typedef long double __float128;

インクルードチェーンの早い段階のどこかに。

それが機能することを保証するものではありませんが、機能する可能性があります。より多くの拡張機能clangのサポートが開始されるまで待つよりも、試してみることをお勧めします。gcc

それかgcc、オプションの場合は に切り替えます。すべての拡張機能をgccサポートしていると確信しています:-)gcc

于 2012-11-23T09:17:50.977 に答える
2

解決策は、この宣言を持つことです。それは魅力のように機能します:

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

テンプレート仕様の再宣言エラーのため、 のソリューションは機能し#defineません。

もちろん、これはハッキングであり、安全でなければなりません。いくつかの実験のためだけにclangが欲しいので、問題はありません。

于 2012-11-23T09:34:05.233 に答える