2012-04-27 159 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