我的应用程序截图
我写了一个申请(类似 Linux Mint 的启动器创建器)在Qt 5.15.2版本。我完成了开发,一切正常。
然后,我想检查它是否可以在任何未安装 Qt 的计算机上运行。
为此,我检查了依赖性我的计算机上的应用程序文件(Ubuntu 20.04 LTS)使用ldd
如下命令
ldd LauncherCreator
结果:
linux-vdso.so.1 (0x00007ffe2c7a9000)
libQt5Widgets.so.5 => /opt/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so.5 (0x00007f2d1eae1000)
libQt5Gui.so.5 => /opt/Qt/5.15.2/gcc_64/lib/libQt5Gui.so.5 (0x00007f2d1e1b0000)
libQt5Core.so.5 => /opt/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5 (0x00007f2d1d9ba000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2d1d7c6000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2d1d7ab000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2d1d5b9000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2d1d594000)
libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f2d1d50c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2d1d3bd000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2d1d3a1000)
libicui18n.so.56 => /opt/Qt/5.15.2/gcc_64/lib/libicui18n.so.56 (0x00007f2d1cf08000)
libicuuc.so.56 => /opt/Qt/5.15.2/gcc_64/lib/libicuuc.so.56 (0x00007f2d1cb50000)
libicudata.so.56 => /opt/Qt/5.15.2/gcc_64/lib/libicudata.so.56 (0x00007f2d1b16b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2d1b165000)
libgthread-2.0.so.0 => /lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f2d1b160000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f2d1b037000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2d1f35c000)
libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f2d1af7f000)
libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f2d1af49000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f2d1aed6000)
libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f2d1ad99000)
libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f2d1ad6f000)
libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f2d1ad69000)
libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f2d1ad5f000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f2d1ad45000)
为了解决这个问题,我只复制了上面出现的与 Qt 相关的库,并粘贴到一个名为库。
我编写了一个安装程序脚本,以便其他计算机下载必要的库并正确安装。 (也许真正的问题就在这里。注意第4步)
#!/bin/bash
sudo echo -----------------------------
# install libGL
echo -----------------------------
echo 'STEP 1: install libGL'
echo
sudo apt install libgl1-mesa-dev -y
# create application folder
echo -----------------------------
echo 'STEP 2: create application folder'
echo
cd /opt/
sudo rm -r LauncherCreator
sudo mkdir LauncherCreator
cd LauncherCreator
sudo mkdir lib
# go into the temporary folder
cd ~/Desktop/temp_LauncherCreator
# change mode to executable
chmod +x ~/Desktop/temp_LauncherCreator/BUILD/LauncherCreator
chmod +x ~/Desktop/temp_LauncherCreator/uninstall_LauncherCreator.sh
# copy files to application folder
echo -----------------------------
echo 'STEP 3: copy files application folder'
echo
sudo cp ~/Desktop/temp_LauncherCreator/BUILD/LauncherCreator /opt/LauncherCreator
sudo cp ~/Desktop/temp_LauncherCreator/LauncherCreator/rocket.ico /opt/LauncherCreator
sudo cp ~/Desktop/temp_LauncherCreator/currentVersion /opt/LauncherCreator
sudo cp ~/Desktop/temp_LauncherCreator/uninstall_LauncherCreator.sh /opt/LauncherCreator
sudo cp ~/Desktop/temp_LauncherCreator/lib/* /opt/LauncherCreator/lib/
# create links
echo -----------------------------
echo 'STEP 4: create links for lib'
echo
cd /opt/LauncherCreator/lib
sudo ln -s libicudata.so.56.1 libicudata.so.56
sudo ln -s libicudata.so.56 libicudata.so
sudo ln -s libicui18n.so.56.1 libicui18n.so.56
sudo ln -s libicui18n.so.56 libicui18n.so
sudo ln -s libicuuc.so.56.1 libicuuc.so.56
sudo ln -s libicuuc.so.56 libicuuc.so
sudo ln -s libQt5Core.so.5.15.2 libQt5Core.so.5.15
sudo ln -s libQt5Core.so.5.15 libQt5Core.so.5
sudo ln -s libQt5Core.so.5 libQt5Core.so
sudo ln -s libQt5Gui.so.5.15.2 libQt5Gui.so.5.15
sudo ln -s libQt5Gui.so.5.15 libQt5Gui.so.5
sudo ln -s libQt5Gui.so.5 libQt5Gui.so
sudo ln -s libQt5Widgets.so.5.15.2 libQt5Widgets.so.5.15
sudo ln -s libQt5Widgets.so.5.15 libQt5Widgets.so.5
sudo ln -s libQt5Widgets.so.5 libQt5Widgets.so
# copy launcher to /usr/share/applications/
echo -----------------------------
echo 'STEP 5: copy launcher'
echo
chmod +x ~/Desktop/temp_LauncherCreator/Launcher_Generator.desktop
sudo cp ~/Desktop/temp_LauncherCreator/Launcher_Generator.desktop /usr/share/applications/
# remove temporary folder
echo -----------------------------
echo 'STEP 6: remove temporary folder'
echo
sudo rm -r ~/Desktop/temp_LauncherCreator
# update applications
echo -----------------------------
echo 'STEP 7: update applications'
echo
sudo apt install update -y
####
echo
echo 'OK'
echo
echo '-----------------------------'
echo 'Bunyamin TAMAR'
echo 'linkedin.com/in/bunyamintamar'
echo 'December 2021'
echo '-----------------------------'
echo
sleep 5
/opt/LauncherCreator/LauncherCreator
exit
这是我的赞成文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
SOURCES += $$files("*.cpp", false)
HEADERS += $$files("*.h", false)
FORMS += $$files("*.ui", false)
RESOURCES += $$files("*.qrc", false)
该应用程序在我的计算机上安装 Qt 5.15 后运行完美。但,在另一台电脑上(Ubuntu 20.04 LTS),它不起作用。
我怎么解决这个问题?
您还可以在我的 GitHub 帐户。 如果我解决了这个问题,将会在我的博客上分享这个应用程序。
(只是应用程序名称不同)
答案1
使用二进制分布式 Qt 开发大规模分发的应用程序不是一个好主意。随机创建符号链接也是一个坏主意。您必须选择目标平台并使用其 Qt 版本。例如 20.04 LTS 有5.12。甚至更低以支持 18.04 LTS。您的应用程序看起来很棒,但它可以与旧版 Qt 一起正常工作。请不要给您的出色应用程序的用户带来问题。下一步要正确执行此操作是创建 PPA为当前支持的 Ubuntu 版本编译 deb 包。
另外请不要误会我的意思,但我们已经两个成熟用于上述目的的应用程序 - 请参阅:
它们是以前包装gnome-desktop-item-edit
中可用的应用程序的良好替代品gnome-panel
(见此问答了解其历史的详细信息)。