qt4源码编译遇到的两个问题

942 阅读1分钟
问题一:
../3rdparty/javascriptcore/JavaScriptCore/wtf/HashTable.h:272:89: 
错误:调用重载的‘swap(std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&, std::pair<QTWTF::RefPtr<QTJSC::UStringImpl>, QTJSC::SymbolTableEntry>&)’有歧义
     template<typename T> struct Mover<T, true> { static void move(T& from, T& to) { swap(from, to); } };

解决:
./mkspecs/linux-g++/qmake.conf中添加:
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98


问题二:
In file included from ../3rdparty/javascriptcore/JavaScriptCore/wtf/FastAllocBase.h:84:0,
                 from ../3rdparty/javascriptcore/JavaScriptCore/wtf/Vector.h:24,
                 from ../3rdparty/javascriptcore/JavaScriptCore/pcre/pcre_exec.cpp:50:
../3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h:173:69: 错误:‘std::tr1’尚未声明
     template<typename T> struct HasTrivialConstructor : public std::tr1::has_trivial_constructor<T> { };

解决:
src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h文件中将:
#if (defined(__GLIBCXX__) && (__GLIBCXX__ >= 20070724) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && (_MSC_VER >= 1600))
#include <type_traits>
#endif
修改为:
#if (defined(__GLIBCXX__) && (__GLIBCXX__ >= 20070724) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || (defined(_MSC_VER) && (_MSC_VER >= 1600))
#include <tr1/type_traits>
#endif