2012-11-23 72 views
14

我已經成功編譯了當前的3.3分支叮噹聲。但是,然後任何文件的C++編譯失敗,錯誤/錯誤。這可以修復嗎?clang和__float128錯誤/錯誤

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. 
+1

你看看這個:http://www.mail-archive.com/[email protected]/msg31724.html? –

+0

你確定clang 3.3支持__float128嗎? – Goz

+0

@Adriano是的,我已經看到了,但不知道有沒有進展。 – Cartesius00

回答

18

您可以修復它。

+0

這對我不起作用(llvm/clang 3.7.1與mingw 4.9.3 posix dwarf) – Antonio

+0

爲我工作,在項目定義之後添加了集合(CMAKE_CXX_FLAGS「$ {CMAKE_CXX_FLAGS} -D__STRICT_ANSI__」)到CmakeLists.txt。我正在使用llvm/clang 4.0.1和mingw 7.1 x86_64 posix seh –

5

我不認爲clang支持__float128。它可以是相同類型long double(這是在clang 16個字節),所以它可以是插入的簡單情況:早某處在包括鏈

typedef long double __float128; 

#define __float128 long double 

或。

我並不保證它可以正常工作,但它可能是最好的嘗試,而不是等到clang開始支持更多的gcc擴展。

或者,或者切換到gcc,如果這是一個選項。我很確定gcc支持全部gcc擴展名:-)

+1

其實這不是一個快速的計劃-D「__ float128 = long double」可能會解決問題... – Goz

+0

這可能是叮噹聲中的一個錯誤。這並不奇怪,因爲3.3是目前的開發分支,3.2還沒有發佈。 OP非常使用實驗代碼。 Clang應該與GCC的C++庫一起工作。 –

+1

不!由於模板規範重新聲明,它不工作,但我找到了解決方案;-) – Cartesius00

3

解決辦法是有這個聲明。它的工作原理就像一個魅力:與#define

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

解決方案不會因爲模板規範重新聲明錯誤的工作。

當然這是一個黑客,你必須是安全的。我只是爲了一些實驗而叮叮噹噹,所以它不會造成任何麻煩。

CXXFLAGS+="-D__STRICT_ANSI__" 
+0

出於興趣,您爲什麼需要'struct'?只是'typedef long double __float128;'有什麼問題? – paxdiablo

+3

@paxdiablo有兩個模板規範(已經),例如:'template <__float128>'和'template '。用typedef你有衝突。 – Cartesius00

+9

我有同樣的問題,因爲我編譯我的代碼與Clang 3.2和** - std = gnu ++ 11 **。在我改爲** - std = C++ 11 **之後,它解決了這個問題。 – bitek