linuxdeploy-plugin-qt
linuxdeploy-plugin-qt copied to clipboard
lacking support for embedded device apps
I am working with the project at https://github.com/jh3010-qt-questions/HelloWorld
My goal is to have linuxdeploy, with the qt plugin, create an AppImage that can be launched by a systemd service on an embedded device.
Both my host and embedded device are running Ubuntu 18.04.
First, I build the Qt Libraries myself with:
./configure -opensource -confirm-license -verbose -pkg-config -no-use-gold-linker -device linux-nuc-g++ -device-option CROSS_COMPILE=/usr/bin/ -kms -gbm -sysroot / -system-freetype -fontconfig -skip webengine -verbose -recheck-all -make libs -prefix /usr/ -extprefix /opt/myapp-target -hostprefix /opt/myapp-host -qt-zlib -qt-libjpeg -qt-libpng -no-feature-bearermanagement -no-xcb -no-xcb-xlib -no-xkbcommon -no-xcb-xinput -no-linuxfb
I believe the relevant flags are -kms
, -gbm
, -prefix /usr/
, -extprefix /opt/myapp-target
, and -hostprefix /opt/myapp-host
If I construct my AppDir by doing:
$ mkdir build
$ cd build
$ /opt/myapp-host/bin/qmake ../HelloWorld.pro -spec linux-g++ CONFIG+=qtquickcompiler
$ make
$ DEBUG=1 QMAKE=/opt/myapp-host/bin/qmake EXTRA_QT_PLUGINS=imageformats QML_SOURCES_PATHS=/home/jamesh/HelloWorld/HelloWorld LD_LIBRARY_PATH=/opt/myapp-target/lib linuxdeploy -e ./HelloWorld -d ../HelloWorld.desktop -i ./HelloWorld.png --appdir AppDir
I get the AppDir
$ tree AppDir/
AppDir/
├── AppRun -> usr/bin/HelloWorld
├── HelloWorld.desktop -> usr/share/applications/HelloWorld.desktop
├── HelloWorld.png -> usr/share/icons/hicolor/256x256/apps/HelloWorld.png
└── usr
├── bin
│ └── HelloWorld
├── lib
│ ├── libbsd.so.0
│ ├── libdouble-conversion.so.1
│ ├── libgraphite2.so.3
│ ├── libicudata.so.60
│ ├── libicui18n.so.60
│ ├── libicuuc.so.60
│ ├── libpcre.so.3
│ ├── libpng16.so.16
│ ├── libQt5Core.so.5
│ ├── libQt5Gui.so.5
│ ├── libQt5Network.so.5
│ ├── libQt5Qml.so.5
│ ├── libXau.so.6
│ └── libXdmcp.so.6
└── share
├── applications
│ └── HelloWorld.desktop
├── doc
│ ├── libbsd0
│ │ └── copyright
│ ├── libdouble-conversion1
│ │ └── copyright
│ ├── libgraphite2-3
│ │ └── copyright
│ ├── libicu60
│ │ └── copyright
│ ├── libpcre3
│ │ └── copyright
│ ├── libpng16-16
│ │ └── copyright
│ ├── libqt5core5a
│ │ └── copyright
│ ├── libqt5gui5
│ │ └── copyright
│ ├── libqt5network5
│ │ └── copyright
│ ├── libqt5qml5
│ │ └── copyright
│ ├── libxau6
│ │ └── copyright
│ └── libxdmcp6
│ └── copyright
└── icons
└── hicolor
├── 128x128
│ └── apps
├── 16x16
│ └── apps
├── 256x256
│ └── apps
│ └── HelloWorld.png
├── 32x32
│ └── apps
├── 64x64
│ └── apps
└── scalable
└── apps
For some reason it did not pull in the imageformats extra plugin. I am guessing it is because the qt plugin is not aware of the LD_LIBRARY_PATH=/opt/myapp-target/lib
... the tool could not find some libraries that were on the
Is there a better way to use the tool in this situation or is this a bug / feature that is not currently supported?
Here is the debug output from the tool:
linuxdeploy version 1-alpha (git commit ID b7c9785), <local dev build> built on 2021-04-22 07:42:08 UTC
-- Creating basic AppDir structure --
Creating directory AppDir/usr/bin/
Creating directory AppDir/usr/lib/
Creating directory AppDir/usr/share/applications/
Creating directory AppDir/usr/share/icons/hicolor/
Creating directory AppDir/usr/share/icons/hicolor/16x16/apps/
Creating directory AppDir/usr/share/icons/hicolor/32x32/apps/
Creating directory AppDir/usr/share/icons/hicolor/64x64/apps/
Creating directory AppDir/usr/share/icons/hicolor/128x128/apps/
Creating directory AppDir/usr/share/icons/hicolor/256x256/apps/
Creating directory AppDir/usr/share/icons/hicolor/scalable/apps/
-- Deploying dependencies for existing files in AppDir --
-- Deploying executables --
Deploying executable ./HelloWorld
WARNING: Could not find copyright files for file ./HelloWorld using dpkg-query
Deploying dependencies for ELF file ./HelloWorld
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libgcc_s.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libc.so.6
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libpthread.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGL.so.1
Deploying shared library /usr/lib/x86_64-linux-gnu/libpng16.so.16
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libpng16.so.16
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libz.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libm.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libQt5Network.so.5
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libQt5Network.so.5
Deploying shared library /usr/lib/x86_64-linux-gnu/libicui18n.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicui18n.so.60
Deploying shared library /usr/lib/x86_64-linux-gnu/libicuuc.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicuuc.so.60
Deploying shared library /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/libdl.so.2
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGLX.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libfreetype.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libgraphite2.so.3
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libgraphite2.so.3
Deploying shared library /usr/lib/x86_64-linux-gnu/libicudata.so.60
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libicudata.so.60
Deploying shared library /lib/x86_64-linux-gnu/libpcre.so.3
Deploying copyright files for file /lib/x86_64-linux-gnu/libpcre.so.3
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libX11.so.6
Skipping deployment of blacklisted library /usr/lib/x86_64-linux-gnu/libxcb.so.1
Deploying shared library /usr/lib/x86_64-linux-gnu/libXau.so.6
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libXau.so.6
Deploying shared library /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Deploying copyright files for file /usr/lib/x86_64-linux-gnu/libXdmcp.so.6
Deploying shared library /lib/x86_64-linux-gnu/libbsd.so.0
Deploying copyright files for file /lib/x86_64-linux-gnu/libbsd.so.0
Skipping deployment of blacklisted library /lib/x86_64-linux-gnu/librt.so.1
-- Copying files into AppDir --
Copying file ./HelloWorld to AppDir/usr/bin/HelloWorld
Copying file /lib/x86_64-linux-gnu/libbsd.so.0 to AppDir/usr/lib/libbsd.so.0
Copying file /lib/x86_64-linux-gnu/libpcre.so.3 to AppDir/usr/lib/libpcre.so.3
Copying file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 to AppDir/usr/lib/libQt5Core.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 to AppDir/usr/lib/libQt5Gui.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Network.so.5 to AppDir/usr/lib/libQt5Network.so.5
Copying file /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5 to AppDir/usr/lib/libQt5Qml.so.5
Copying file /usr/lib/x86_64-linux-gnu/libXau.so.6 to AppDir/usr/lib/libXau.so.6
Copying file /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 to AppDir/usr/lib/libXdmcp.so.6
Copying file /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1 to AppDir/usr/lib/libdouble-conversion.so.1
Copying file /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 to AppDir/usr/lib/libgraphite2.so.3
Copying file /usr/lib/x86_64-linux-gnu/libicudata.so.60 to AppDir/usr/lib/libicudata.so.60
Copying file /usr/lib/x86_64-linux-gnu/libicui18n.so.60 to AppDir/usr/lib/libicui18n.so.60
Copying file /usr/lib/x86_64-linux-gnu/libicuuc.so.60 to AppDir/usr/lib/libicuuc.so.60
Copying file /usr/lib/x86_64-linux-gnu/libpng16.so.16 to AppDir/usr/lib/libpng16.so.16
Copying file /usr/share/doc/libbsd0/copyright to AppDir/usr/share/doc/libbsd0/copyright
Copying file /usr/share/doc/libdouble-conversion1/copyright to AppDir/usr/share/doc/libdouble-conversion1/copyright
Copying file /usr/share/doc/libgraphite2-3/copyright to AppDir/usr/share/doc/libgraphite2-3/copyright
Copying file /usr/share/doc/libicu60/copyright to AppDir/usr/share/doc/libicu60/copyright
Copying file /usr/share/doc/libpcre3/copyright to AppDir/usr/share/doc/libpcre3/copyright
Copying file /usr/share/doc/libpng16-16/copyright to AppDir/usr/share/doc/libpng16-16/copyright
Copying file /usr/share/doc/libqt5core5a/copyright to AppDir/usr/share/doc/libqt5core5a/copyright
Copying file /usr/share/doc/libqt5gui5/copyright to AppDir/usr/share/doc/libqt5gui5/copyright
Copying file /usr/share/doc/libqt5network5/copyright to AppDir/usr/share/doc/libqt5network5/copyright
Copying file /usr/share/doc/libqt5qml5/copyright to AppDir/usr/share/doc/libqt5qml5/copyright
Copying file /usr/share/doc/libxau6/copyright to AppDir/usr/share/doc/libxau6/copyright
Copying file /usr/share/doc/libxdmcp6/copyright to AppDir/usr/share/doc/libxdmcp6/copyright
Calling strip on library AppDir/usr/bin/HelloWorld
Calling strip on library AppDir/usr/lib/libQt5Core.so.5
Calling strip on library AppDir/usr/lib/libQt5Gui.so.5
Calling strip on library AppDir/usr/lib/libQt5Network.so.5
Calling strip on library AppDir/usr/lib/libQt5Qml.so.5
Calling strip on library AppDir/usr/lib/libXau.so.6
Calling strip on library AppDir/usr/lib/libXdmcp.so.6
Calling strip on library AppDir/usr/lib/libbsd.so.0
Calling strip on library AppDir/usr/lib/libdouble-conversion.so.1
Calling strip on library AppDir/usr/lib/libgraphite2.so.3
Calling strip on library AppDir/usr/lib/libicudata.so.60
Calling strip on library AppDir/usr/lib/libicui18n.so.60
Calling strip on library AppDir/usr/lib/libicuuc.so.60
Calling strip on library AppDir/usr/lib/libpcre.so.3
Calling strip on library AppDir/usr/lib/libpng16.so.16
Setting rpath in ELF file AppDir/usr/bin/HelloWorld to $ORIGIN/../lib
Setting rpath in ELF file AppDir/usr/lib/libQt5Core.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Gui.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Network.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libQt5Qml.so.5 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libXau.so.6 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libXdmcp.so.6 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libbsd.so.0 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libdouble-conversion.so.1 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libgraphite2.so.3 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicudata.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicui18n.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libicuuc.so.60 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libpcre.so.3 to $ORIGIN
Setting rpath in ELF file AppDir/usr/lib/libpng16.so.16 to $ORIGIN
-- Deploying icons --
Deploying icon ./HelloWorld.png
WARNING: Could not find copyright files for file ./HelloWorld.png using dpkg-query
-- Deploying desktop files --
Deploying desktop file ../HelloWorld.desktop
-- Copying files into AppDir --
Copying file ./HelloWorld.png to AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png
Copying file ../HelloWorld.desktop to AppDir/usr/share/applications/HelloWorld.desktop
-- Deploying files into AppDir root directory --
Deploying files to AppDir root using desktop file: AppDir/usr/share/applications/HelloWorld.desktop
Deploying desktop file to AppDir root: AppDir/usr/share/applications/HelloWorld.desktop
Creating symlink for file AppDir/usr/share/applications/HelloWorld.desktop in/as AppDir
Deploying icon to AppDir root: AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png
Creating symlink for file AppDir/usr/share/icons/hicolor/256x256/apps/HelloWorld.png in/as AppDir
Deploying AppRun symlink for executable in AppDir root: AppDir/usr/bin/HelloWorld
Creating symlink for file AppDir/usr/bin/HelloWorld in/as AppDir/AppRun