1、前言

        因为项目需要,需要在ubuntu arm64环境下打包一个Qt程序,考虑到后续可能多次使用到,在此进行记录。

2、环境

        ①Linux aarch64 GNU/Linux

        ②Qt 5.12.8

        ③GCC/G++ 9.4.0

        ④Git 2.25.1

3、准备

        1、下载Linuxdeployqt源码

使用Git命令下载linuxdeployqt源码

git clone https://github.com/probonopd/linuxdeployqt.git

 或者直接进入github下载源码

Linuxdeployqt的Github页面icon-default.png?t=O83Ahttps://github.com/probonopd/linuxdeployqt/tree/master

        2、下载Appimagetool-aarch64.AppImage

进入linuxdeployqt源码文件夹的DUILDING.md文件中给出的Appimagetool下载路径icon-default.png?t=O83Ahttps://github.com/AppImage/AppImageKit/releases,下载Appimagetool-aarch64.AppImage

4、编译linuxdeployqt

1.配置环境变量

在终端窗口输入命令行

vim ~/.bashrc

在打开文件的结尾追加以下内容

#add qt env
export PATH=/opt/Qt5.13.0/5.13.0/gcc_64/bin:$PATH
export LIB_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/qml:$QML2_PATH

 注:/opt/Qt5.13.0/5.13.0/gcc_64是本电脑Qt安装目录,不同电脑安装不一定相同,需要根据自己的情况替换。

然后,使用source命令让文件立即生效。

source ~/.bashrc

然后,通过qmake命令对环境变量测试下,是否设置正确。如下:

qmake -v

看到qmake的版本号,则表示设置成功。

2.编译linuxdeployqt

进入linuxdeployqt源码所在文件夹

cd linuxdeployqt

使用qmake与make命令在linuxdeployqt文件夹下编译

qmake
make

编译完成后,会在linuxdeployqt源码文件夹下生成bin文件夹,在bin文件夹下将会有linuxdeployqt可执行程序(以下图片仅为示意)

修改linuxdeployqt可执行程序的权限

sudo chmod 777 linuxdeployqt

为了使用方便,将linuxdeployqt可执行程序复制到/usr/local/bin文件夹下,这样就可以在其他目录中使用linuxdeployqt了

sudo mv linuxdeployqt /usr/local/bin

在任一其他目录中打开终端窗口,使用一下命令查看是否成功

linuxdeployqt --version

出现linuxdeployqt的版本信息,就为成功

5、安装patchelf

sudo apt update
sudo apt install patchelf

如果不安装patchelf,在打包时可能会出现如下图等错误

 可以通过一下命令查看patchelf是否安装成功

patchelf --version

出现版本号即为安装成功 

 6、配置Appimagetool

将准备时下载的Appimagetool-aarch64.AppImage程序改名为appimagetool,并修改权限

mv appimagetool-aarch64.AppImage appimagetool
sudo chmod 777 appimagetool

将appimagetool同样移动到/usr/local/bin目录下

sudo mv appimagetool /usr/local/bin

7、打包Qt程序

将生成的Release版本的可执行程序拷贝到单独的文件夹中

        例子:在某个目录建立TestSetup目录,用于放置打包相关的文件;并在TestSetup下继续建个Test目录,用来装Test应用及拷贝文件。

mkdir TestSetup
cd TestSetup
mkdir Test

把我们的应用Test拷贝到Test目录下

使用命令执行依赖文件拷贝(打包):

linuxdeployqt Test -appimage

如没有Desktop,Icon的Error信息以外的错误出现,即为打包成功,如下图

等待打包完成后,即可在文件夹下查看到lib,plugins等文件夹

 注:需要说明的是,在执行“linuxdeployqt Test -appimage”命令时,其实除了拷贝依赖文件外,还对目标文件Test进行了修改,在Test中插入了一些库路径信息。

经过其他大佬对前后2个文件内容的对比测试,至少是添加了lib目录的。

所以,你只需要把程序依赖的so文件放入lib目录下,无论是显式、隐式加载的so,都是可以搜索到的。

若你的应用中还有其他,如配置文件等资源,那么手动拷贝到你自己代码指定的目录下。

重要提示:

  • 因为linuxdeployqt将在内部使用ldd命令,来确定从何处将库复制到包中。ldd命令本身只能查找隐式加载的so,故若程序中代码使用显式加载的so,它是找不到的,这时需要开发者自己去保证显式加载so的路径可被搜索。
  • 举个例子:若存在程序A显式加载B.so,B.so隐式加载C.so,则对程序A使用linuxdeployqt拷贝依赖时,程序A的间接依赖文件C.so,将不会被拷贝。当程序跑起来加载B.so时,就会报找不到C.so的错误。这一点尤其需要注意。此时我们需要再对B.so使用一次linuxdeployqt拷贝依赖。这样程序A加载B.so,B.so加载C.so,就都可以找到了。

测试启动应用

./Test

此时如果不出意外,应该可以正常启动。

如果有意外,那就根据实际情况,先把问题解决,再继续。

 8、其他

如果在x86_64架构下的linux/ubuntu系统,可以尝试直接从github中下载

 Linuxdeployqt的Github的Release下载页面icon-default.png?t=O83Ahttps://github.com/probonopd/linuxdeployqt/releases/tag/continuous

下载完成后,使用命令设置权限与重命名,并移动到/usr/local/bin目录下

mv linuxdeployqt-continues-x86_64.AppImage linuxdeployqt
sudo chmod 777 linuxdeployqt
sudo mv appimagetool /usr/local/bin

之后就可以通过步骤7打包Qt程序了

最后

通过网上查阅资料,最后完成ubuntu arm架构下Qt程序的打包,感谢几位大佬提供的资料

使用linuxdeployqt在linux下进行Qt打包发布(超详细)-CSDN博客

使用linuxdeployqt在linux下进行Qt打包发布 (超详细) (*****)-CSDN博客

Ubuntu 编译 linuxdeployqt_ubuntu20.04 编译linuxdeployqt-CSDN博客

以上仅为本人在参考多位大佬的文章进行linuxdeployqt的使用过程分享,如有错漏,还望指正

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐