УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

[BugWrong] Ошибка компиляции с -std=c++11


Автор Сообщение
Сообщение создано: 24. 11. 2017 [17:49]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"Megavoltik" wrote:

"roman" wrote:

Точнее там у меня сейчас 5.8 и на нём эта проблема есть.

На Qt 5.9.3 та же беда. Сегодня попробовал. Короче все что выше 5.3 - неработоспособно. Может тогда в зависимостях не >=5.7.0, а >=5.3 поставить? Хоть дописать смогу тест...

В каких таких зависимостях?

Learn, learn and learn better than work, work and work.
Сообщение создано: 27. 11. 2017 [10:47]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

Пусть побудет, я в ближайшее время добавлю менеджер проектов прямо в UI.QTStarter, после чего ближе рассмотрю эту проблему и другие с Qt на Android.

Менеджера ещё не добавил, но проблему нашёл: http://oscada.org/ru/forum/posts//vision_razrabotka_polzovatelskogo_interfeisa_qt5_nevozm

Learn, learn and learn better than work, work and work.
Сообщение создано: 12. 08. 2018 [15:36]
evoro
Евгений Воропаев
Зарегистрирован(а) с: 17.12.2014
Сообщения: 8
Здравствуйте, коллеги!

Из вышесказанного понял следующее:
1) Так как переходим на qt5 нужно использовать c++ стандарта ISO 2011. Для этого компилятору GCC нужно подсказать, что нужно использовать такой стандарт.
Для этого в отличие от указанной в инструкции по сборке команды ./configure указываем:
./configure Qt5Widgets_CFLAGS='-std=c++11'
У меня это сработало.

2) Или используем компилятор, который по умолчанию применяет C++ стандарта ISO 2011, согласно рекомендации Романа. Я компиляю под AltLinux KWorkstation 8 . В репозиториях, прописанных в нём по умолчанию, gcc 5.3 - самая старшая версия gcc: её и использую! Использовать другую версию проблематично для меня, но вопрос следующий...
Вопрос: На какую версию gcc перейти, чтобы реализовать вариант 2) ?

Однако,
3) После включения -std=c++11 функции пакета math.h стали доступны только через пространство имён std:: . Рекомендация Романа для решения этой проблемы: использовать компилятор, использующий функции пакета math напрямую.
Вопрос прежний: На какую версию gcc перейти, чтобы реализовать рекомендацию Романа?

4) Как применить Java-скрипт Алексея, я, честно говоря не понял, в силу отсутствия опыта работы с Java. И что именно он делает, я тоже не понял: меняет ли он текст в файлах исходников? Если меняет, то это несколько неправильно, так как начинается рассинхронизация с текущим проектом, выложенным Романом в сети в репозитории.
Сейчас решение которое я вижу для себя - корректировать исходники приписывая std:: перед всеми вызовами функций пакета math, что также неправильно и ведёт к рассинхронизации.

5) Раз проект OpenSCADA окончательно переходит на qt5, не имеет ли смысл:
- исправить вызовы этих функций в исходниках;
- включить флаг "-std=c++11" в конфигурацию для сборки или указать в инструкции по сборке, что такой флаг нужно дописать при вызове ./configure при использовании qt5?

6) Не понял, нужно ли включать флаг --with-qt5=yes ?

Итог... сборка OpenSCADA у меня остановилась.
Порекомендуйте, пожалуйста, как выйти из ситуации и продолжить сборку OpenSCADA?
Сообщение создано: 13. 08. 2018 [09:55]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
Зачем дублировать пост, лучше шире смотреть на вопрос?! :)

"evoro" wrote:

Из вышесказанного понял следующее:
1) Так как переходим на qt5 нужно использовать c++ стандарта ISO 2011. Для этого компилятору GCC нужно подсказать, что нужно использовать такой

Нет никакого перехода!
OpenSCADA давно адаптирована для работы с Qt5 и прекрасно работает на Qt4, собираясь на Linux окружениях начиная с около 2002 года - год основания проекта.
Т.е., на новых и "прямых" окружениях осуществляется сборка с Qt5, а на старых и "кривых" с Qt4, как Ваше.

"evoro" wrote:

2) Или используем компилятор, который по умолчанию применяет C++ стандарта ISO 2011, согласно рекомендации Романа. Я компиляю под AltLinux KWorkstation 8 . В репозиториях, прописанных в нём по умолчанию, gcc 5.3 - самая старшая версия gcc: её и использую! Использовать другую версию проблематично для меня, но вопрос следующий...
Вопрос: На какую версию gcc перейти, чтобы реализовать вариант 2) ?

На "прямую" — у меня нет проблем со сборкой на GCC4.9, GCC6, GCC7 и даже GCC5.3 на Android.

"evoro" wrote:

Однако,
3) После включения -std=c++11 функции пакета math.h стали доступны только через пространство имён std:: . Рекомендация Романа для решения этой проблемы: использовать компилятор, использующий функции пакета math напрямую.
Вопрос прежний: На какую версию gcc перейти, чтобы реализовать рекомендацию Романа?

Ответ тот-же — на "прямую".

"evoro" wrote:

4) Как применить Java-скрипт Алексея, я, честно говоря не понял, в силу отсутствия опыта работы с Java. И что именно он делает, я тоже не понял: меняет ли он текст в файлах исходников? Если меняет, то это несколько неправильно, так как начинается рассинхронизация с текущим проектом, выложенным Романом в сети в репозитории.
Сейчас решение которое я вижу для себя - корректировать исходники приписывая std:: перед всеми вызовами функций пакета math, что также неправильно и ведёт к рассинхронизации.

Естественно, и подобные хаки "кривых" окружений в замене стандартных POSIX функций недопустимы!

"evoro" wrote:

5) Раз проект OpenSCADA окончательно переходит на qt5, не имеет ли смысл:
- исправить вызовы этих функций в исходниках;
- включить флаг "-std=c++11" в конфигурацию для сборки или указать в инструкции по сборке, что такой флаг нужно дописать при вызове ./configure при использовании qt5?

Никуда он не переходит!
И замена POSIX функций это не исправление, тем более специально для тупикового и "кривого" окружения, которого в нормальных Linux дистрибутивах и всех последних компиляторах GCC6,7 нет, или как Вы думаете оно у меня собирается для Debian 9, Ubuntu 18.04, SuSE 15?

"evoro" wrote:

Порекомендуйте, пожалуйста, как выйти из ситуации и продолжить сборку OpenSCADA?

Собирать с Qt4, или пробовать предыдущую версию GCC4.9, если ALTLinux совсем не доломали и там всё еще присутствую компиляторы нескольких версий.

Learn, learn and learn better than work, work and work.



2411