2012-04-27 5 views
3

Я пытаюсь п-й раз компилировать кварты из источника, на этот раз с -release -platform-win32 ошибок, но я получаю вариант конфигурационными:
enter image description hereстанд :: tr1 не был объявлен

Любой знает, как это исправить?
Спасибо.

+0

Какая версия mingw32 gcc вы используете - это определенно включает в себя заголовки tr1? Является ли источник QT определенными, включая те, которые ему нужны? – Rup

+1

@Rup Я использую gcc 4.7, похоже, что у него есть те заголовки – smallB

+0

Да, я слишком поздно заметил, что на вашем выходе все равно будет 'win32-g ++ - 4.6'. Он пытается использовать 'std :: tr1 :: has_trivial_constructor', который должен быть объявлен в' type_traits'. Однако похоже, что он уже пытается включить это. Возможно, вы могли бы отредактировать '# if' в файле (или временно '# undef' одну из констант, а затем переопределить его в конце), поэтому он использует свой tr1-not-available код. – Rup

ответ

2

Если вы используете GCC 4.7 у вас есть доступ к большинству C++ 11, если вы компилируете с -std=c++11 или -std=gnu++11 вы можете проверить поддерживаемые функции под std имен here. tr1 подпространство имен предназначено для проекта, который теперь стал стандартным.

+0

@aj Извините, но как вы ответили на мой вопрос? – smallB

+0

QT использует mingw, который обертывает gcc, который нуждается в '-std = gnu ++ 11' или новые функции будут неопределенными. Если вы не используете этот параметр, вам нужно будет удалить все ссылки, которые не соответствуют C++ 03 для компиляции. – AJG85

+1

@aj дистрибутив Я использую использование C++ 11 по умолчанию – smallB

3

Вы можете столкнуться с этой проблемой при компиляции Qt с помощью компилятора MinGW (возможно, любого gcc-компилятора), который по умолчанию выполняет компиляцию программ на C++ с включенным стандартом C++ 11.

Сторонняя библиотека JavaScriptCore пытается определить некоторые оболочки, которые «нормализуют» has_trivial_constructor и связанные с ними шаблоны, но, судя по всему, он еще не был обновлен, чтобы иметь дело с обновлениями GCC, чтобы включить завершенный стандарт C++ 11.

Исправление использовать компилятор MinGW, которая не включает C++ 11 функций по умолчанию, или выключить их путем редактирования mkspecs\win32-g++\qmake.conf добавить опцию -std=gnu++98 на C++ строит:

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

Отличный ответ, исправленный мой qt make (4.8) в 2017 году. – adgang

0

Try (завернутый в макрос вокруг #include <type_traits>) добавление #include <tr1/memory> в TypeTraits.h

Смежные вопросы