2012-04-27 161 views
3

我想第n次從源代碼編譯QT,這一次選擇配置 - 釋放-platform-win32的 但我發現了錯誤:
enter image description here的std :: TR1尚未聲明

任何人知道如何解決它?
謝謝。

+0

你使用的是哪個版本的mingw32 gcc - 它確實包含了tr1頭文件嗎? QT的來源絕對包括它所需要的嗎? – Rup 2012-04-27 16:28:00

+1

@Rup我使用gcc 4.7,它看起來像它有這些頭文件 – smallB 2012-04-27 16:29:25

+0

是的,我發現太晚了,它說在輸出中有'win32-g ++ - 4.6'。它試圖使用應該在'type_traits'中聲明的'std :: tr1 :: has_trivial_constructor'。不過看起來它已經試圖包含這一點。你可以在文件中編輯'#if's(或者臨時編寫'#undef'中的一個常量,然後在最後重新定義它),以便使用tr1不可用的代碼。 – Rup 2012-04-27 16:33:26

回答

2

如果你正在使用gcc 4.7,你可以訪問大多數的C++ 11,如果你有-std=c++11-std=gnu++11你可以在std命名空間here檢查出支持的功能編譯。 tr1子命名空間適用於現在已經制定標準的草案。

+0

@aj我很抱歉,您的回答與我的問題有關? – smallB 2012-04-27 16:38:28

+0

QT使用mingw,它包裝gcc,它需要'-std = gnu ++ 11'或者新的特性將被定義。如果你不使用這個選項,你將需要刪除任何不符合C++ 03標準的引用來編譯。 – AJG85 2012-04-27 16:43:16

+1

@aj我使用的發行版默認使用C++ 11 – smallB 2012-04-27 16:49:18

3

使用MinGW編譯器(可能是任何gcc編譯器)編譯Qt時,可能會遇到此問題,該編譯器默認啓用C++ 11標準來編譯C++程序。

第三方庫JavaScriptCore試圖定義一些'正常化'包裝和相關模板,但顯然它尚未被更新以處理GCC的更新以包含完整的C++ 11標準。

的解決方法是使用MinGW的編譯器不支持C++ 11個功能默認情況下,或通過編輯mkspecs\win32-g++\qmake.conf-std=gnu++98選項添加到C++來關閉它們構建:

QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98 
#        ^^^^^^^^^^^^ 
+0

很好的答案,在2017年修正了我的qt make(4.8)。 – adgang 2017-07-24 23:45:55

0

嘗試(包裹在宏周圍#include <type_traits>)加入 #include <tr1/memory>在TypeTraits.h