Can't Compile Test Qt-Widget(Static) locally
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>
libpng is missing, you can use add_syslinks to add it, or debug qt rule
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'
you can debug it.
https://github.com/xmake-io/xmake/blob/ef6704260b307376a23ef0638c1ee8e48a4dbc5c/xmake/rules/qt/load.lua#L409