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

★★★

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

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

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

annulen ★★★★★ ()
Ответ на: комментарий от 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)