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

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


Автор Повідомлення
Повідомлення створено: 17. 11. 2017 [14:12]
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
Если собирать с Qt5 (пробовал обе LTS версии 5.6 и 5.9.1) требуется указывать флаг -std=c++11:
JAVASCRIPT
./configure --prefix=$HOME/apps/openscada09qt56 --with-qt5=yes PKG_CONFIG_PATH=$HOME/apps/Qt/5.6/gcc_64/lib/pkgconfig Qt5Widgets_CFLAGS='-std=c++11'

Что в свою очередь при сборке компилятором gcc версии 5.4 приводит к следующей ошибке компиляции:

libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../../../src -std=c++11 -I/home/aleax/apps/Qt/5.6/gcc_64/include/QtPrintSupport -I/home/aleax/apps/Qt/5.6/gcc_64/include -I/home/aleax/apps/Qt/5.6/gcc_64/include/QtWidgets -I/home/aleax/apps/Qt/5.6/gcc_64/include -I/home/aleax/apps/Qt/5.6/gcc_64/include/QtGui -I/home/aleax/apps/Qt/5.6/gcc_64/include -I/home/aleax/apps/Qt/5.6/gcc_64/include/QtCore -I/home/aleax/apps/Qt/5.6/gcc_64/include -g -O2 -MT ui_Vision_la-vis_shapes.lo -MD -MP -MF .deps/ui_Vision_la-vis_shapes.Tpo -c vis_shapes.cpp -fPIC -DPIC -o .libs/ui_Vision_la-vis_shapes.o
vis_shapes.cpp: In member function ‘void VISION::ShapeDiagram::makeTrendsPicture(VISION::WdgView*)’:
vis_shapes.cpp:3283:17: error: ‘isnan’ was not declared in this scope
if(isnan(curVl)) curVl = EVAL_REAL;
^
vis_shapes.cpp:3283:17: note: suggested alternative:
In file included from /usr/include/c++/5/random:38:0,
from /usr/include/c++/5/bits/stl_algo.h:66,
from /usr/include/c++/5/algorithm:62,
from vis_shapes.cpp:27:
/usr/include/c++/5/cmath:641:5: note: ‘std::isnan’
isnan(_Tp __x)
^
vis_shapes.cpp: In member function ‘void VISION::ShapeDiagram::TrendObj::loadTrendsData(bool)’:
vis_shapes.cpp:3685:127: error: ‘isinf’ was not declared in this scope
vis_shapes.cpp:3685:127: note: suggested alternative:
In file included from /usr/include/c++/5/random:38:0,
from /usr/include/c++/5/bits/stl_algo.h:66,
from /usr/include/c++/5/algorithm:62,
from vis_shapes.cpp:27:
/usr/include/c++/5/cmath:621:5: note: ‘std::isinf’
isinf(_Tp __x)
^
vis_shapes.cpp:3784:88: error: ‘isinf’ was not declared in this scope
vis_shapes.cpp:3784:88: note: suggested alternative:
In file included from /usr/include/c++/5/random:38:0,
from /usr/include/c++/5/bits/stl_algo.h:66,
from /usr/include/c++/5/algorithm:62,
from vis_shapes.cpp:27:
/usr/include/c++/5/cmath:621:5: note: ‘std::isinf’
isinf(_Tp __x)
^
Makefile:606: спроба виконання рецепта для мети «ui_Vision_la-vis_shapes.lo» зазнала невдачі
make: *** [ui_Vision_la-vis_shapes.lo] Помилка 1


решается указанием неймспейса std:
JAVASCRIPT
diff --git a/src/moduls/ui/Vision/vis_shapes.cpp b/src/moduls/ui/Vision/vis_shapes.cpp
index 0748c4d..585c066 100644
--- a/src/moduls/ui/Vision/vis_shapes.cpp
+++ b/src/moduls/ui/Vision/vis_shapes.cpp
@@ -3280,7 +3280,7 @@ void ShapeDiagram::makeTrendsPicture( WdgView *w )
                curTm = vmin(aVend,vmax(aVbeg,cP.val()[a_pos].tm));
                curVl = cP.val()[a_pos].val;
                if(vsPercT && curVl != EVAL_REAL) curVl = 100*(curVl-bordL)/(bordU-bordL);
-               if(isnan(curVl)) curVl = EVAL_REAL;
+               if(std::isnan(curVl)) curVl = EVAL_REAL;
                curPos = tAr.x()+tAr.width()*(curTm-tBeg)/(tPict-tBeg);
            } else curPos = 0;
            if(!curPos || cP.val()[a_pos].tm >= aVend) end_vl = true;
@@ -3682,7 +3682,7 @@ void ShapeDiagram::TrendObj::loadTrendsData( bool full )
                    valEnd_ = (valEnd()/wantPer)*wantPer;
            if(lstTm && lstTm >= valEnd_) {
                double curVal = (req.text() == EVAL_STR) ? EVAL_REAL : s2r(req.text());
-               if((val_tp == TFld::Boolean && curVal == EVAL_BOOL) || (val_tp == TFld::Integer && curVal == EVAL_INT) || isinf(curVal))
+               if((val_tp == TFld::Boolean && curVal == EVAL_BOOL) || (val_tp == TFld::Integer && curVal == EVAL_INT) || std::isinf(curVal))
                    curVal = EVAL_REAL;
                if(valEnd_ && (lstTm-valEnd_)/vmax(wantPer,trcPer) > 2) vals.push_back(SHg(lstTm-trcPer,EVAL_REAL));
                else if((lstTm-valEnd_) >= wantPer) vals.push_back(SHg(lstTm,curVal));
@@ -3781,7 +3781,7 @@ void ShapeDiagram::TrendObj::loadTrendsData( bool full )
            curPos = s2i(TSYS::strParse(svl,0," ",&var_off,true));
            curVal = s2r((curValS=TSYS::strParse(svl,0," ",&var_off,true)));
            if(curValS == EVAL_STR || (val_tp == TFld::Boolean && curVal == EVAL_BOOL) ||
-                                     (val_tp == TFld::Integer && curVal == EVAL_INT) || isinf(curVal))
+                                     (val_tp == TFld::Integer && curVal == EVAL_INT) || std::isinf(curVal))
                curVal = EVAL_REAL;
        }
        else curPos = maxPos+1;



P.S.: Обнаружил что в одном из рабочих проектов, в интерфейсе Vision, при переходе с главного кадра на другую страницу происходит падение скады. Сборка с Qt5.9.1 падает, а с Qt5.6 нет. Буду дальше искать в чем дело.
Повідомлення створено: 17. 11. 2017 [14:54]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"aleax" wrote:

Если собирать с Qt5 (пробовал обе LTS версии 5.6 и 5.9.1) требуется указывать флаг -std=c++11:

Да, требуется, только нужно их собирать компилятором у которого это уже по умолчанию или достаточно прямо и где ничего подобного нет!
Смотрим сборку для Android: http://oscada.org/wiki/Sub-projects/Adaption_to_Android

Т.е. здесь нет ошибок OpenSCADA!

"aleax" wrote:

P.S.: Обнаружил что в одном из рабочих проектов, в интерфейсе Vision, при переходе с главного кадра на другую страницу происходит падение скады. Сборка с Qt5.9.1 падает, а с Qt5.6 нет. Буду дальше искать в чем дело.

На Android у меня ничего не падает, кроме того при сборке с последними Qt5 крайне желательно использовать параметр конфигурации сборки --enable-QtMainThrd !

Learn, learn and learn better than work, work and work.
Повідомлення створено: 17. 11. 2017 [15:58]
aleax
Alexey Bondarchuk
Автор теми
Зареєстрован(а) с: 27.01.2010
Повідомлення: 73
"roman" wrote:

Да, требуется, только нужно их собирать компилятором у которого это уже по умолчанию или достаточно прямо и где ничего подобного нет!
Смотрим сборку для Android: http://oscada.org/wiki/Sub-projects/Adaption_to_Android

Т.е. здесь нет ошибок OpenSCADA!


ОК, буду дальше изучать вопрос.
Посмотрел в документации http://oscada.org/wiki/Sub-projects/Adaption_to_Android, там явно указывается флаг c++11 при подготовке сборочной среды:
JAVASCRIPT
export CXXFLAGS="$CFLAGS -std=c++11 -I$NDK_PATH/sources/cxx-stl/gnu-libstdc++/$TARGET_V/include\


"roman" wrote:

На Android у меня ничего не падает, кроме того при сборке с последними Qt5 крайне желательно использовать параметр конфигурации сборки --enable-QtMainThrd !

Собираю и тестирую под десктоп линукс. Пока изучаю coredump.
Повідомлення створено: 18. 11. 2017 [00:14]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"aleax" wrote:

ОК, буду дальше изучать вопрос.
Посмотрел в документации http://oscada.org/wiki/Sub-projects/Adaption_to_Android, там явно указывается флаг c++11 при подготовке сборочной среды:

Да, и компиляторы там "прямы" и не теряют стандартных математических функций C.

"aleax" wrote:

"roman" wrote:

На Android у меня ничего не падает, кроме того при сборке с последними Qt5 крайне желательно использовать параметр конфигурации сборки --enable-QtMainThrd !

Собираю и тестирую под десктоп линукс. Пока изучаю coredump.

Не падало. Собственно там есть проблема с видом "Текст" примитива элементов формы на отдельном окне, что приводит к падению, но везде и независимо от Qt.
Это исправил.

В остальном, на Debian 9, GCC 6.3, Qt5.7.1, GLibC 2.24 проблем нет и я думаю, что переключу сборки для него на Qt5, поскольку стиль Qt5 там уже приемлем и будет вариант поглядеть на Qt5 на живом диске.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 20. 11. 2017 [09:43]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"roman" wrote:

В остальном, на Debian 9, GCC 6.3, Qt5.7.1, GLibC 2.24 проблем нет и я думаю, что переключу сборки для него на Qt5, поскольку стиль Qt5 там уже приемлем и будет вариант поглядеть на Qt5 на живом диске.

Переключил, теперь все сборки для Debian9 используют Qt5!

Learn, learn and learn better than work, work and work.
Повідомлення створено: 23. 11. 2017 [08:06]
Megavoltik
Игорь Гапша
Зареєстрован(а) с: 20.11.2017
Повідомлення: 4
"roman" wrote:

"roman" wrote:

В остальном, на Debian 9, GCC 6.3, Qt5.7.1, GLibC 2.24 проблем нет и я думаю, что переключу сборки для него на Qt5, поскольку стиль Qt5 там уже приемлем и будет вариант поглядеть на Qt5 на живом диске.

Переключил, теперь все сборки для Debian9 используют Qt5!


Добрый день. Подниму тему. Есть проблема на Debian 9, GCC 6.3.0, Qt 5.7.1. В Рабочем пользовательском интерфейсе при попытке редактирования атрибутов элемента к примеру "Геометрия" курсор убегает вверх и отредактировать их невозможно. На Qt 4 и r2516-1 таких проблем не было. Появились только после моего обновления вчера на r2522-2. Причем на двух машинах сразу. С чем это может быть связано и как исправить?.

Да, Debian 9.1.

[Повідомлення редагувалось 2 раз(ів), останній раз 23.11.2017 в 08:13.]
Повідомлення створено: 23. 11. 2017 [08:42]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"Megavoltik" wrote:

"roman" wrote:

Переключил, теперь все сборки для Debian9 используют Qt5!

Добрый день. Подниму тему. Есть проблема на Debian 9, GCC 6.3.0, Qt 5.7.1. В Рабочем пользовательском интерфейсе при попытке редактирования атрибутов элемента к примеру "Геометрия" курсор убегает вверх и отредактировать их невозможно. На Qt 4 и r2516-1 таких проблем не было. Появились только после моего обновления вчера на r2522-2. Причем на двух машинах сразу. С чем это может быть связано и как исправить?.

Да, есть такое, в смысле невозможности даже выбрать элемент в дереве глубиной более первого уровня.
Только это не проблема OpenSCADA поскольку она никак выбором элементов не управляет, а только принимает сигналы по выбору.

Кроме того на Qt5.3 такого не замечалось, сегодня ещё погляжу на 5.9, на Android.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 23. 11. 2017 [08:56]
Megavoltik
Игорь Гапша
Зареєстрован(а) с: 20.11.2017
Повідомлення: 4
"roman" wrote:

"Megavoltik" wrote:

"roman" wrote:

Переключил, теперь все сборки для Debian9 используют Qt5!

Добрый день. Подниму тему. Есть проблема на Debian 9, GCC 6.3.0, Qt 5.7.1. В Рабочем пользовательском интерфейсе при попытке редактирования атрибутов элемента к примеру "Геометрия" курсор убегает вверх и отредактировать их невозможно. На Qt 4 и r2516-1 таких проблем не было. Появились только после моего обновления вчера на r2522-2. Причем на двух машинах сразу. С чем это может быть связано и как исправить?.

Да, есть такое, в смысле невозможности даже выбрать элемент в дереве глубиной более первого уровня.
Только это не проблема OpenSCADA поскольку она никак выбором элементов не управляет, а только принимает сигналы по выбору.

Кроме того на Qt5.3 такого не замечалось, сегодня ещё погляжу на 5.9, на Android.


Даже больше скажу: на Qt 5.5.1 такого на замечалось. Спасибо

Может тогда вернуть пока на Qt4?

[Повідомлення редагувалось 1 раз(ів), останній раз 23.11.2017 в 09:00.]
Повідомлення створено: 24. 11. 2017 [10:16]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"Megavoltik" wrote:

"roman" wrote:

Кроме того на Qt5.3 такого не замечалось, сегодня ещё погляжу на 5.9, на Android.


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

"Megavoltik" wrote:

Даже больше скажу: на Qt 5.5.1 такого на замечалось. Спасибо
Может тогда вернуть пока на Qt4?

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

Learn, learn and learn better than work, work and work.
Повідомлення створено: 24. 11. 2017 [13:07]
Megavoltik
Игорь Гапша
Зареєстрован(а) с: 20.11.2017
Повідомлення: 4
"roman" wrote:

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

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

"roman" wrote:

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

ОК



[Повідомлення редагувалось 1 раз(ів), останній раз 24.11.2017 в 13:08.]



1112