xmake icon indicating copy to clipboard operation
xmake copied to clipboard

Can't Compile Test Qt-Widget(Static) locally

Open DawnMagnet opened this issue 10 months ago • 3 comments

Xmake 版本

xmake v3.0.0+dev.2774ecb, A cross-platform build utility based on Lua

操作系统版本和架构

Archlinux

描述问题

Can't Compile xmake/tests/projects/qt/widgetapp_static locally, but there is no error with cmake or xmake, which prove my statically linked qt library is correct. But xmake can't pass it's own test

期待的结果

can compile

工程配置

add_rules("mode.debug", "mode.release")

includes("@builtin/qt")

target("demo")
    add_rules("qt.widgetapp_static")
    add_headerfiles("src/*.h")
    add_files("src/*.cpp")
    add_files("src/mainwindow.ui")
    add_files("src/mainwindow.h")
    add_frameworks("QtSvg")
    qt_add_static_plugins("QSvgPlugin", {linkdirs = "plugins/imageformats", links = {"qsvg"}})

附加信息和错误日志

The error is so long so I store it in files error.log

and the preview is following

sgct@MokkaShip in repo: xmake/tests/projects/qt/widgetapp_static on  dev +/- via  as 🧙
⬢ [debian]   ❯ xmake f --qt=/usr/local/Qt-5.15.16/
checking for platform ... linux
checking for architecture ... x86_64
checking for Qt SDK directory ... /usr/local/Qt-5.15.16
checking for Qt SDK version ... 5.15.16

sgct@MokkaShip in repo: xmake/tests/projects/qt/widgetapp_static on  dev +/- via  as 🧙
⬢ [debian]   ❯ xmake -vD
checking for Qt SDK directory ... /usr/local/Qt-5.15.16
checking for Qt SDK version ... 5.15.16
[ 25%]: compiling.qt.ui src/mainwindow.ui
/usr/local/Qt-5.15.16/bin/uic src/mainwindow.ui -o build/.gens/demo/linux/x86_64/release/rules/qt/ui/ui_mainwindow.h
checking for gcc ... /usr/bin/gcc
checking for the c++ compiler (cxx) ... gcc
checking for /usr/bin/gcc ... ok
checking for flags (-fPIC) ... ok
> gcc "-fPIC" "-m64"
checking for flags (-fvisibility-inlines-hidden) ... ok
> gcc "-fvisibility-inlines-hidden" "-m64"
checking for flags (-O3) ... ok
> gcc "-O3" "-m64"
checking for flags (-DNDEBUG) ... ok
> gcc "-DNDEBUG" "-m64"
checking for flags (-fPIC) ... ok
> gcc "-fPIC" "-m64"
[ 37%]: compiling.qt.moc src/mainwindow.h
/usr/local/Qt-5.15.16/bin/moc -DQT_NO_DEBUG -DQT_DEPRECATED_WARNINGS -DQT_SVG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_CORE_LIB -Ibuild/.gens/demo/linux/x86_64/release/platform/windows/idl -I/home/sgct/Downloads/xmake/tests/projects/qt/widgetapp_static/build/.gens/demo/linux/x86_64/release/rules/qt/ui -I/usr/local/Qt-5.15.16/include/QtSvg -I/usr/local/Qt-5.15.16/include/QtSvg/5.15.16 -I/usr/local/Qt-5.15.16/include/QtSvg/5.15.16/QtSvg -I/usr/local/Qt-5.15.16/include/QtGui -I/usr/local/Qt-5.15.16/include/QtGui/5.15.16 -I/usr/local/Qt-5.15.16/include/QtGui/5.15.16/QtGui -I/usr/local/Qt-5.15.16/include/QtWidgets -I/usr/local/Qt-5.15.16/include/QtWidgets/5.15.16 -I/usr/local/Qt-5.15.16/include/QtWidgets/5.15.16/QtWidgets -I/usr/local/Qt-5.15.16/include/QtCore -I/usr/local/Qt-5.15.16/include/QtCore/5.15.16 -I/usr/local/Qt-5.15.16/include/QtCore/5.15.16/QtCore -I/usr/local/Qt-5.15.16/include -I/usr/local/Qt-5.15.16/mkspecs/linux-g++ src/mainwindow.h -o build/.gens/demo/linux/x86_64/release/src/moc_mainwindow.cpp
/usr/bin/gcc -c -m64 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++11 -Ibuild/.gens/demo/linux/x86_64/release/platform/windows/idl -I/home/sgct/Downloads/xmake/tests/projects/qt/widgetapp_static/build/.gens/demo/linux/x86_64/release/rules/qt/ui -DQT_NO_DEBUG -DQT_DEPRECATED_WARNINGS -DQT_SVG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_CORE_LIB -isystem /usr/local/Qt-5.15.16/include/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtGui -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16/QtGui -isystem /usr/local/Qt-5.15.16/include/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtCore -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16/QtCore -isystem /usr/local/Qt-5.15.16/include -isystem /usr/local/Qt-5.15.16/mkspecs/linux-g++ -DNDEBUG-fPIC -o build/.objs/demo/linux/x86_64/release/gens/src/moc_mainwindow.cpp.o build/.gens/demo/linux/x86_64/release/src/moc_mainwindow.cpp
[ 50%]: cache compiling.release src/main.cpp
/usr/bin/gcc -c -m64 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++11 -Ibuild/.gens/demo/linux/x86_64/release/platform/windows/idl -I/home/sgct/Downloads/xmake/tests/projects/qt/widgetapp_static/build/.gens/demo/linux/x86_64/release/rules/qt/ui -DQT_NO_DEBUG -DQT_DEPRECATED_WARNINGS -DQT_SVG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_CORE_LIB -isystem /usr/local/Qt-5.15.16/include/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtGui -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16/QtGui -isystem /usr/local/Qt-5.15.16/include/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtCore -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16/QtCore -isystem /usr/local/Qt-5.15.16/include -isystem /usr/local/Qt-5.15.16/mkspecs/linux-g++ -DNDEBUG-fPIC -o build/.objs/demo/linux/x86_64/release/src/main.cpp.o src/main.cpp
[ 62%]: cache compiling.release src/mainwindow.cpp
/usr/bin/gcc -c -m64 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++11 -Ibuild/.gens/demo/linux/x86_64/release/platform/windows/idl -I/home/sgct/Downloads/xmake/tests/projects/qt/widgetapp_static/build/.gens/demo/linux/x86_64/release/rules/qt/ui -DQT_NO_DEBUG -DQT_DEPRECATED_WARNINGS -DQT_SVG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_CORE_LIB -isystem /usr/local/Qt-5.15.16/include/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtGui -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16/QtGui -isystem /usr/local/Qt-5.15.16/include/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtCore -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16/QtCore -isystem /usr/local/Qt-5.15.16/include -isystem /usr/local/Qt-5.15.16/mkspecs/linux-g++ -DNDEBUG-fPIC -o build/.objs/demo/linux/x86_64/release/src/mainwindow.cpp.o src/mainwindow.cpp
[ 75%]: cache compiling.release build/.qt/plugin/demo/static_import.cpp
/usr/bin/gcc -c -m64 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++11 -Ibuild/.gens/demo/linux/x86_64/release/platform/windows/idl -I/home/sgct/Downloads/xmake/tests/projects/qt/widgetapp_static/build/.gens/demo/linux/x86_64/release/rules/qt/ui -DQT_NO_DEBUG -DQT_DEPRECATED_WARNINGS -DQT_SVG_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_CORE_LIB -isystem /usr/local/Qt-5.15.16/include/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtSvg/5.15.16/QtSvg -isystem /usr/local/Qt-5.15.16/include/QtGui -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtGui/5.15.16/QtGui -isystem /usr/local/Qt-5.15.16/include/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtWidgets/5.15.16/QtWidgets -isystem /usr/local/Qt-5.15.16/include/QtCore -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16 -isystem /usr/local/Qt-5.15.16/include/QtCore/5.15.16/QtCore -isystem /usr/local/Qt-5.15.16/include -isystem /usr/local/Qt-5.15.16/mkspecs/linux-g++ -DNDEBUG-fPIC -o build/.objs/demo/linux/x86_64/release/build/.qt/plugin/demo/static_import.cpp.o build/.qt/plugin/demo/static_import.cpp
checking for flags (-MMD -MF) ... ok
> gcc "-MMD" "-MF" "/dev/null" "-m64"
checking for flags (-fdiagnostics-color=always) ... ok
> gcc "-fdiagnostics-color=always" "-m64"
checking for flags (-Wno-gnu-line-marker -Werror) ... ok
> gcc "-Wno-gnu-line-marker" "-Werror" "-m64"
checking for g++ ... /usr/bin/g++
checking for the linker (ld) ... g++
checking for /usr/bin/g++ ... ok
checking for flags (-fPIC) ... ok
> g++ "-fPIC" "-m64" "-m64"
checking for flags (-Wl,-rpath=/usr/local/Qt-5.15.16/lib) ... ok
> g++ "-Wl,-rpath=/usr/local/Qt-5.15.16/lib" "-m64" "-m64"
[ 87%]: linking.release demo
/usr/bin/g++ -o build/linux/x86_64/release/demo build/.objs/demo/linux/x86_64/release/src/main.cpp.o build/.objs/demo/linux/x86_64/release/src/mainwindow.cpp.o build/.objs/demo/linux/x86_64/release/build/.qt/plugin/demo/static_import.cpp.o build/.objs/demo/linux/x86_64/release/gens/src/moc_mainwindow.cpp.o -m64 -L/usr/local/Qt-5.15.16/plugins/imageformats -L/usr/local/Qt-5.15.16/lib -Wl,-rpath=/usr/local/Qt-5.15.16/lib -s -lqsvg -lQt5Svg -lQt5Gui -lQt5Widgets -lQt5Core
/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Gui.a(qpnghandler.o): in function `iod_read_fn':
qpnghandler.cpp:(.text.iod_read_fn+0x12): undefined reference to `png_get_io_ptr'
/usr/bin/ld: qpnghandler.cpp:(.text.iod_read_fn+0xcc): undefined reference to `png_error'
/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Gui.a(qpnghandler.o): in function `qpiw_write_fn':
qpnghandler.cpp:(.text.qpiw_write_fn+0xe): undefined reference to `png_get_io_ptr'
/usr/bin/ld: qpnghandler.cpp:(.text.qpiw_write_fn+0x37): undefined reference to `png_error'
/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Gui.a(qpnghandler.o): in function `QPngHandler::~QPngHandler()':
qpnghandler.cpp:(.text._ZN11QPngHandlerD2Ev+0x2d): undefined reference to `png_destroy_read_struct'
/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Gui.a(qpnghandler.o): in function `QPngHandlerPrivate::readImageFormat()':
qpnghandler.cpp:(.text._ZN18QPngHandlerPrivate15readImageFormatEv+0x4f): undefined reference to `png_get_IHDR'
/usr/bin/ld: qpnghandler.cpp:(.text._ZN18QPngHandlerPrivate15readImageFormatEv+0xb9): undefined reference to `png_get_channels'
/usr/bin/ld: qpnghandler.cpp:(.text._ZN18QPngHandlerPrivate15readImageFormatEv+0xde): undefined reference to `png_get_valid'
/usr/bin/ld: qpnghandler.cpp:(.text._ZN18QPngHandlerPrivate15readImageFormatEv+0x11e): undefined reference to `png_get_valid'

So many error lines


qcolordialog.cpp:(.text._ZN12QColorDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv+0xb4): undefined reference to `QColorDialogOptions::options()const'
/usr/bin/ld: qcolordialog.cpp:(.text._ZN12QColorDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv+0x175): undefined reference to `QColorDialogOptions::setCustomColor(int, unsigned int)'
/usr/bin/ld: qcolordialog.cpp:(.text._ZN12QColorDialog18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv+0x194): undefined reference to `QColorDialogOptions::customColorCount()'
collect2: error: ld returned 1 exit status
error: @programdir/core/main.lua:329: @programdir/actions/build/main.lua:148: @programdir/modules/async/runjobs.lua:325: @programdir/actions/build/kinds/binary.lua:57: @programdir/core/sandbox/modules/os.lua:378: execv(/usr/bin/g++ -o build/linux/x86_64/release/demo build/.objs/demo/linux/x86_64/release/src/main.cpp.o build/.objs/demo/linux/x86_64/release/src/mainwindow.cpp.o build/.objs/demo/linux/x86_64/release/build/.qt/plugin/demo/static_import.cpp.o build/.objs/demo/linux/x86_64/release/gens/src/moc_mainwindow.cpp.o -m64 -L/usr/local/Qt-5.15.16/plugins/imageformats -L/usr/local/Qt-5.15.16/lib -Wl,-rpath=/usr/local/Qt-5.15.16/lib -s -lqsvg -lQt5Svg -lQt5Gui -lQt5Widgets -lQt5Core) failed(1)
stack traceback:
[C]: in function 'error'
[@programdir/core/base/os.lua:1075]:
[@programdir/core/sandbox/modules/os.lua:378]: in function 'execv'
[@programdir/modules/core/tools/gcc.lua:599]:
[C]: in function 'xpcall'
[@programdir/core/base/utils.lua:246]:
[@programdir/core/tool/linker.lua:232]: in function 'link'
[@programdir/actions/build/kinds/binary.lua:57]: in function 'callback'
[@programdir/modules/core/project/depend.lua:227]: in function 'on_changed'
[@programdir/actions/build/kinds/binary.lua:41]: in function '_do_link_target'
[@programdir/actions/build/kinds/binary.lua:87]:
[@programdir/actions/build/kinds/binary.lua:114]: in function '_link_target'
[@programdir/actions/build/kinds/binary.lua:142]: in function 'jobfunc'
[@programdir/modules/async/runjobs.lua:241]:
[C]: in function 'xpcall'
[@programdir/core/base/utils.lua:246]: in function 'trycall'
[@programdir/core/sandbox/modules/try.lua:117]: in function 'try'
[@programdir/modules/async/runjobs.lua:224]: in function 'cotask'
[@programdir/core/base/scheduler.lua:406]:

stack traceback:
[C]: in function 'error'
@programdir/core/base/os.lua:1075: in function 'os.raiselevel'
(...tail calls...)
@programdir/core/main.lua:329: in upvalue 'cotask'
@programdir/core/base/scheduler.lua:406: in function <@programdir/core/base/scheduler.lua:399>

DawnMagnet avatar May 04 '25 12:05 DawnMagnet

libpng is missing, you can use add_syslinks to add it, or debug qt rule

waruqi avatar May 06 '25 14:05 waruqi

In fact it should contains a lot of qt libraries and i think this should be included in qt.rules


add_syslinks("png")
add_syslinks("qtlibpng")
add_syslinks("jpeg")
add_syslinks("qtlibjpeg")
add_syslinks("qtharfbuzz")
add_syslinks("qtpcre2")
add_syslinks("qtfreetype")

and after i add this , no more error about png or jpeg or harfbuzz, but another error, i pasted it here

/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Widgets.a(qcombobox.o): in function `QComboBox::insertItem(int, QIcon const&, QString const&, QVariant const&)':
qcombobox.cpp:(.text._ZN9QComboBox10insertItemEiRK5QIconRK7QStringRK8QVariant+0x82): undefined reference to `QStandardItemModel::staticMetaObject'
/usr/bin/ld: qcombobox.cpp:(.text._ZN9QComboBox10insertItemEiRK5QIconRK7QStringRK8QVariant+0xad): undefined reference to `QStandardItem::QStandardItem(QString const&)'
/usr/bin/ld: qcombobox.cpp:(.text._ZN9QComboBox10insertItemEiRK5QIconRK7QStringRK8QVariant+0x11a): undefined reference to `QStandardItemModel::insertRow(int,QList<QStandardItem*> const&)'
/usr/bin/ld: /usr/local/Qt-5.15.16/lib/libQt5Widgets.a(qcombobox.o): in function `QComboBox::insertSeparator(int)':
qcombobox.cpp:(.text._ZN9QComboBox15insertSeparatorEi+0x18f): undefined reference to `QStandardItemModel::staticMetaObject'
/usr/bin/ld: qcombobox.cpp:(.text._ZN9QComboBox15insertSeparatorEi+0x1ab): undefined reference to `QStandardItemModel::itemFromIndex(QModelIndex const&) const'

DawnMagnet avatar May 06 '25 15:05 DawnMagnet

you can debug it.

https://github.com/xmake-io/xmake/blob/ef6704260b307376a23ef0638c1ee8e48a4dbc5c/xmake/rules/qt/load.lua#L409

waruqi avatar May 07 '25 14:05 waruqi