LINUX.ORG.RU

ошибка сборки Qt5-приложения

 ,


0

1

добрый день

подробности:
сборка на рабочей станции - с ошибкой
сборка на виртуалке - без проблем
прочие не Qt-сборки (на рабочей тачке) без проблем

конфигурации «виртуалка/раб.станция» примерно одинаковые, во вс.случае версии системы/пакетов из «одной бочки», ну и, понятное дело, на раб.тачке постоянно что-то настраивается, устанавливается, затачивается :о)

пробовал (не дало разультатов):
- проверять настройки рабочего окружения (env), ни чего особенного
- export UIC=$QTBIN/uic
- export QT_QMAKE_EXECUTABLE=$QMAKE
- export QMAKESPEC=$QTDIR/mkspecs/linux-g++-$_X # X=32/64
- /etc/ld.so.conf
- «прятал» все прочие версии qt, оставлял в системе только Qt5

- что-то подобное рассмотрено тут URL но, тем не менее, пока не рассматриваю, как «решение», т.к. в vbox-е собирается нормально (да и сборка qt нынче не сахар :о)

собранный в vbox-пакет иногда сваливается при запуске на раб.станции (грешу на запущенную vbox), но, если запустился, то работает нормально

слакбилд свой, но, надеюсь, он не имеет отношения к ошибке :о)

сделал выхлоп с обоих систем, нашел различие в командах (на ошибочной цели), вывод ниже

перепахивать/заново переустанавливать/перенастраивать рабочую станцию не буду, нет времени

пожалуйста, предлагаю просто высказываться, что думаете, где может быть зарыта собака, можно просто побалагурить на околотему, пошвыряться помидорами :о)

спасибо

нормальная сборка / from vbox - work code's

g++ -c -m64 -pipe -std=c++11 -O2 -fPIC -O2 -O2 -fPIC -std=gnu++11 -Wall -W -D_REENTRANT
-fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I
-isystem /usr/include/qt5
-isystem /usr/include/qt5/QtWidgets
-isystem /usr/include/qt5/QtGui
-isystem /usr/include/qt5/QtNetwork
-isystem /usr/include/qt5/QtCore -I.moc
-isystem /usr/include/libdrm -I.ui -I/usr/lib64/qt5/mkspecs/linux-g++-64 -o
.obj/moc_qsynthPaletteForm.o .moc/moc_qsynthPaletteForm.cpp

сборка с ошибкой / на рабочей тачке

g++ -c -m64 -pipe -std=c++11 -O2 -fPIC -O2 -O2 -fPIC -std=gnu++11 -Wall -W -D_REENTRANT
-fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I.
-I/usr/lib64/qt5/include
-I/usr/lib64/qt5/include/QtWidgets
-I/usr/lib64/qt5/include/QtGui
-I/usr/lib64/qt5/include/QtNetwork
-I/usr/lib64/qt5/include/QtCore -I.moc
-isystem /usr/include/libdrm -I.ui -I/usr/lib64/qt5/mkspecs/linux-g++-64 -o
.obj/moc_qsynthPaletteForm.o .moc/moc_qsynthPaletteForm.cpp

.moc/moc_qsynthPaletteForm.cpp:263:3: error: cannot convert ‘const QMetaObject* const*’ to ‘const
QMetaObject::SuperData*’ in initialization

 } };
   ^

исходные данные

- slackware  14.2 x64
- vbox       5.2.36
- qt5        5.12.8
- qt5_webkit 5.9.1
- qsynth     0.9.4

★★★★

Последнее исправление: sunjob (всего исправлений: 3)

А тебе принципиально заниматься ручным вызовом компилятора? Есть же системы сборки, которые сами подберут нужные параметры. А если нужно указать дополнительные параметры, то всегда можно их также указать.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)

QT5

Нет такого фреймворка, его название пишется так: Qt 5.

Исправь в заголовке и в самом тексте.

minda
()
Ответ на: комментарий от aol

версии компилятора на хосте и в виртуалке?

идентичны

... версии системы/пакетов из «одной бочки»...

sunjob ★★★★
() автор топика
Ответ на: комментарий от u-235

С флагом -fpermissive пробовали собирать?

как это поможет избавиться от ошибки?! :о)

п.с. пробовал...аналогично :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)

moc_qsynthPaletteForm.cpp на рабочей станции и виртуалке идентичны?

anonymous
()
Ответ на: комментарий от sunjob

загадка… всё же, попробуй -fpermissive как тут советовали..

но, где-то разница, однозначно, есть..

aol ★★★★★
()
Ответ на: комментарий от aol
  • что-то подобное рассмотрено тут URL но, тем не менее, пока не рассматриваю, как «решение»

Пост не читай
@
Сразу отвечай

anonymous
()
Ответ на: комментарий от anonymous

Сразу отвечай

канэшна! since 2009! ;)

aol ★★★★★
()
Ответ на: ... всё же, попробуй ... от sunjob

… всё же, попробуй …

окей-окей… «въезжаем в баден-баден» ;)

а сравни еще, для интереса, версии moc и qmake? (прям через moc -version)

aol ★★★★★
()

Нужно сравнить выдачу препроцессора в обоих случаях и найти причину ошибки. Наверняка какой-нибудь макрос прилетел из некутишного заголовка, или какой-то заголовок заинклудился не оттуда, откуда ожидалось

annulen ★★★★★
()
Ответ на: комментарий от annulen

Одинаковые единицы

main$ md5 moc_qsynthPaletteForm.cpp
MD5(moc_qsynthPaletteForm.cpp)= 80414022d8e912c5b658735705eca15b

vbox_50$ md5 moc_qsynthPaletteForm.cpp
MD5(moc_qsynthPaletteForm.cpp)= 80414022d8e912c5b658735705eca15b

moc 5.12.8 - в обоих случаях
sunjob ★★★★
() автор топика
Ответ на: комментарий от annulen

чЁ, помидоры закончились, перешли к тяжелой антилерии?! :о)

пальцем ткни, а?! :о)

add: долбанул кувалдой по слакбилду, добавил «правильную команду сборки» - сборка модуля прошла без ошибки

make $JOB || \
echo "### ERROR BUILD ###" && \
cd src && \
g++ -c <blah-blah-blah work build code> && \
echo "### REPEAT BUILD OK ###"

-->

.moc/moc_qsynthPaletteForm.cpp:259:3: error: cannot convert ‘const QMetaObject* const*’ to ‘const QMetaObject::SuperData*’ in initialization
 } };
   ^
Makefile:5001: recipe for target '.obj/moc_qsynthPaletteForm.o' failed
make[2]: *** [.obj/moc_qsynthPaletteForm.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/dev/shm/tmp/sun/x/qsynth-0.9.4/qsynth-0.9.4/src'
qsynth.mak:46: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/dev/shm/tmp/sun/x/qsynth-0.9.4/qsynth-0.9.4'
Makefile:95: recipe for target 'src/qsynth' failed
make: *** [src/qsynth] Error 2
### ERROR BUILD ###
### REPEAT BUILD OK ###
sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от annulen

я так понял, д.б. выхлоп кода после препроцессора? странно, ни чего нет...:о( или я не правильно думаю?

g++ -E ...

почему «формуруются» разные команды сборки?!

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

я так понял, д.б. выхлоп кода после препроцессора?

Да.

странно, ни чего нет

Так не бывает. Нужно заменить в команде компиляции -c на -E (и, опционально, поменять расшириение .o файла на что-то другое, а то потом забудешь его удалить и не слинкуется)

почему «формуруются» разные команды сборки

покажи qmake -query на обеих системах (от того qmake, которым собираешь)

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

весьма странный выхлоп

qmake -query

work_error system:
QT_SYSROOT:
QT_INSTALL_PREFIX:/usr/lib64/qt5
QT_INSTALL_ARCHDATA:/usr/lib64/qt5
QT_INSTALL_DATA:/usr/lib64/qt5
QT_INSTALL_DOCS:/usr/Docs/Qt-5.14.2
QT_INSTALL_HEADERS:/usr/lib64/qt5/include
QT_INSTALL_LIBS:/usr/lib64/qt5/lib
QT_INSTALL_LIBEXECS:/usr/lib64/qt5/libexec
QT_INSTALL_BINS:/usr/lib64/qt5/bin
QT_INSTALL_TESTS:/usr/lib64/qt5/tests
QT_INSTALL_PLUGINS:/usr/lib64/qt5/plugins
QT_INSTALL_IMPORTS:/usr/lib64/qt5/imports
QT_INSTALL_QML:/usr/lib64/qt5/qml
QT_INSTALL_TRANSLATIONS:/usr/lib64/qt5/translations
QT_INSTALL_CONFIGURATION:/usr/lib64/qt5
QT_INSTALL_EXAMPLES:/usr/Examples/Qt-5.14.2
QT_INSTALL_DEMOS:/usr/Examples/Qt-5.14.2
QT_HOST_PREFIX:/usr/lib64/qt5
QT_HOST_DATA:/usr/lib64/qt5
QT_HOST_BINS:/usr/lib64/qt5/bin
QT_HOST_LIBS:/usr/lib64/qt5/lib
QMAKE_SPEC:linux-g++
QMAKE_XSPEC:linux-g++
QMAKE_VERSION:3.1
QT_VERSION:5.12.8

vbox_system:
QT_SYSROOT:
QT_INSTALL_PREFIX:/usr/lib64/qt5
QT_INSTALL_ARCHDATA:/usr/lib64/qt5
QT_INSTALL_DATA:/usr/lib64/qt5
QT_INSTALL_DOCS:/usr/doc/qt5-5.12.8
QT_INSTALL_HEADERS:/usr/include/qt5
QT_INSTALL_LIBS:/usr/lib64
QT_INSTALL_LIBEXECS:/usr/lib64/qt5/libexec
QT_INSTALL_BINS:/usr/lib64/qt5/bin
QT_INSTALL_TESTS:/usr/lib64/qt5/tests
QT_INSTALL_PLUGINS:/usr/lib64/qt5/plugins
QT_INSTALL_IMPORTS:/usr/lib64/qt5/imports
QT_INSTALL_QML:/usr/lib64/qt5/qml
QT_INSTALL_TRANSLATIONS:/usr/lib64/qt5/translations
QT_INSTALL_CONFIGURATION:/etc/xdg
QT_INSTALL_EXAMPLES:/usr/doc/qt5-5.12.8/examples
QT_INSTALL_DEMOS:/usr/doc/qt5-5.12.8/examples
QT_HOST_PREFIX:/usr/lib64/qt5
QT_HOST_DATA:/usr/lib64/qt5
QT_HOST_BINS:/usr/lib64/qt5/bin
QT_HOST_LIBS:/usr/lib64
QMAKE_SPEC:linux-g++
QMAKE_XSPEC:linux-g++
QMAKE_VERSION:3.1
QT_VERSION:5.12.8

отличия, блин :о) err/work

QT_INSTALL_DOCS:/usr/Docs/Qt-5.14.2
QT_INSTALL_DOCS:/usr/doc/qt5-5.12.8

QT_INSTALL_HEADERS:/usr/lib64/qt5/include
QT_INSTALL_HEADERS:/usr/include/qt5

QT_INSTALL_LIBS:/usr/lib64/qt5/lib
QT_INSTALL_LIBS:/usr/lib64

QT_INSTALL_CONFIGURATION:/usr/lib64/qt5
QT_INSTALL_CONFIGURATION:/etc/xdg        ###!!! че за фигня?!

QT_INSTALL_EXAMPLES:/usr/Examples/Qt-5.14.2
QT_INSTALL_EXAMPLES:/usr/doc/qt5-5.12.8/examples

QT_INSTALL_DEMOS:/usr/Examples/Qt-5.14.2
QT_INSTALL_DEMOS:/usr/doc/qt5-5.12.8/examples

QT_HOST_LIBS:/usr/lib64/qt5/lib
QT_HOST_LIBS:/usr/lib64
sunjob ★★★★
() автор топика
Ответ на: весьма странный выхлоп от sunjob

В самих по себе отличиях нет ничего смертельного, Qt можно проинсталлить по-разному, и дистрибутивы давно занимаются подобными непотребствами. Но это как минимум говорит о том, что системы не одинаковые, даже версии Qt разные

annulen ★★★★★
()
Ответ на: комментарий от annulen

версии Qt разные

ну да?!

скорее всего на раб.тачке сначало была попытка собрать/установить более новую версию (я не помню)

... понятное дело, на раб.тачке постоянно что-то настраивается, устанавливается, затачивается :о)

а потом откатился на «стоковую», пакет для установки на обоих системах один (в данный момент)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 5)
Ответ на: комментарий от annulen

p.s. системы как-бы зеркальные (ну почти :о), наверное, в описании надо было это уточнить

и система и пакеты - идентичные, только «рабочая» немного поюзанная :о)

- slackware 14.2 x64
- qt5-5.12.8-x86_64-sl14.2
- qt5_webkit-5.9.1-x86_64-sl14.2_alien

подозреваю, что все проблемы в окружении/настройках ...

qt-пакеты пробовал переставлять на обоих системах

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

немного поюзанная

Поюзанная - понятие растяжимое. У кого-то «поюзанная» может означать, что cтавили софт из сорсов прям в /usr в обход любых пакетных менеджеров, даже без checkinstall. В такой ситуации в системе могли остаться, например, заголовки от другой версии Qt, которые подхватывает #include. По выдаче препроцессора такое можно обнаружить, кроме того есть ключик -H, печатающий дерево инклудов в более наглядном виде.

я так понял, д.б. выхлоп кода после препроцессора?

В выходном файле, разумеется, не будет же он сто тысяч строк в консоль печатать

annulen ★★★★★
()
Ответ на: комментарий от annulen

выдача препроцессора

-с -> -E , diff $CWD/moc_qsynthPaletteForm_ok CWD/moc_qsynthPaletteForm_er 

в основном состоит из "подобного"
< # 46 "/usr/include/qt5/QtCore/qglobal.h"       2 3 4
< # 1  "/usr/include/c++/5.5.0/cstddef"          1 3 4
< # 42 "/usr/include/c++/5.5.0/cstddef"          3 4
---
> # 46 "/usr/lib64/qt5/include/QtCore/qglobal.h" 2
> # 1  "/usr/include/c++/5.5.0/cstddef"          1 3
> # 42 "/usr/include/c++/5.5.0/cstddef"          3

критически "левых" инклюдов нет
sunjob ★★★★
() автор топика

Проблема решена

Причина была в замусоренном каталоге qt5, в частности include :o) всем спасибо за внимание, сопереживание и помощь! :о)

sunjob ★★★★
() автор топика
Ответ на: выдача препроцессора от sunjob

На будущее: выдача препроцессора - это (почти) нормальный C++ файл, в нем ошибку можно найти так же, как и в исходнике, написанном вручную.

Вот допустим, у тебя пишет moc_qsynthPaletteForm.cpp:259:3: error: cannot convert ‘const QMetaObject* const*’ to ‘const QMetaObject::SuperData*’ in initialization. Находишь соответствующую строчку в выдаче препроцессора. Если нет очевиднвх ошибок, смотришь внимательно вокруг, нет ли каких-то бредовых подстановок в окружающем коде из moc_qsynthPaletteForm.cpp. Если все еще непонятно, находишь поиском определения типа который конвертится и QMetaObject::SuperData. Если типы не имеют ничего общего, или если есть несколько конфликтующих деклараций, смотришь из каких файлов они инклудятся. И т.д.

Конечно, разводить срач в /usr нельзя, но в крайнем случае по препроцессору можно любую такую ошибку локализовать, и никакой магии в этом нет.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.