KylinV10上qt5.9开发应用打包步骤(四)--linuxdeployqt源码编译

38 篇文章 3 订阅

1.linuxdeployqt源码编译

下载linuxdeployqt源码包,6版本的

~$ git clone -b 6 https://gitee.com/yangfanimb/linuxdeployqt.git
正克隆到 'linuxdeployqt'...
remote: Enumerating objects: 2542, done.
remote: Counting objects: 100% (2542/2542), done.
remote: Compressing objects: 100% (1091/1091), done.
remote: Total 2542 (delta 1438), reused 2542 (delta 1438), pack-reused 0
接收对象中: 100% (2542/2542), 761.15 KiB | 369.00 KiB/s, 完成.
处理 delta 中: 100% (1438/1438), 完成.
检查连接... 完成。
Note: checking out '37631e5640d8f7c31182fa72b31266bbdf6939fc'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

执行下面的步骤

sudo apt-get -y install git g++ libgl1-mesa-dev

//export PATH=$(readlink -f /tmp/.mount_QtCreator-*-x86_64/*/gcc_64/bin/):$PATH
export PATH=$(readlink -f /home/tlx/Qt5.9.9/5.9.9/gcc_64/bin/):$PATH
cd linuxdeployqt
qmake
make

遇到报错 对‘ucal_clone_56’未定义的引用

/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucal_clone_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucnv_close_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucol_setAttribute_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucnv_setSubstChars_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucal_close_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucal_openTimeZoneIDEnumeration_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucnv_fromUnicode_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘uenum_close_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucnv_getDefaultName_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucal_inDaylightTime_56’未定义的引用
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5Core.so:对‘ucnv_compareNames_56’未定义的引用
...

解决

~/linuxdeployqt$ export LD_LIBRARY_PATH=/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/

可以将上述两个环境变量写进/etc/profile中

export PATH=$(readlink -f /home/tlx/Qt5.9.9/5.9.9/gcc_64/bin/):$PATH
export LD_LIBRARY_PATH="/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/:$LD_LIBRARY_PATH"

参考:BUILDING.md
QT5引用库出错即解决

以上是工具的源码编译,下面使用工具进行依赖解决

2. 解决依赖

linuxdeployqt package -appimage

输出

linuxdeployqt 6 (commit 37631e5), build <local dev build> built on 2021-03-19 06:36:30 UTC
Not using FHS-like mode
app-binary: "/home/tlx/test/build-package-Desktop_Qt_5_9_9_GCC_64bit-Debug/package"
appDirPath: "/home/tlx/test/build-package-Desktop_Qt_5_9_9_GCC_64bit-Debug"
relativeBinPath: "package"
ERROR: Desktop file missing, creating a default one (you will probably want to edit it)
ERROR: Icon file missing, creating a default one (you will probably want to edit it)
ERROR: ldd outputLine: "/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5WebEngineWidgets.so.5: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.9' not found (required by /home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5WebEngineWidgets.so.5)"
ERROR: for binary: "/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib/libQt5WebEngineWidgets.so.5"
ERROR: Please ensure that all libraries can be found by ldd. Aborting.

可以看到需要生成桌面文件,图片,没有生成默认的,最重要的是还有依赖找不到,下面就解决这个吧。 到相应的目录下去查看,发现这些文件其实都是有的,只有一个异常

tlx@TLX001:~/test/build-package-Desktop_Qt_5_9_9_GCC_64bit-Debug$ ll /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
lrwxrwxrwx 1 root root 19 2月  23 17:46 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 -> libQt5Core.so.5.6.1

我的版本是5.9.9,所以这里不对,怎么办,找到一个思路,参考:ubuntu更改qmake版本
,感谢这位博主,我的机器的具体目录是在:

sudo vim /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf

将文件中的qt4内容删除,写入qt5的内容如下:

/home/tlx/Qt5.9.9/5.9.9/gcc_64/bin
/home/tlx/Qt5.9.9/5.9.9/gcc_64/lib

再次运行linuxdeployqt package -appimage

报错 ERROR: Could not start patchelf

$ linuxdeployqt package -appimage
linuxdeployqt 6 (commit 37631e5), build <local dev build> built on 2021-03-19 06:36:30 UTC
Not using FHS-like mode
app-binary: "/home/tlx/test/build-package-Desktop_Qt_5_9_9_GCC_64bit-Debug/package"
appDirPath: "/home/tlx/test/build-package-Desktop_Qt_5_9_9_GCC_64bit-Debug"
relativeBinPath: "package"
Keeping existing AppRun
ERROR: Could not start patchelf.
ERROR: Make sure it is installed on your $PATH.
ERROR: Error reading rpath with patchelf "libQt5WebEngineWidgets.so" : ""
ERROR: Error reading rpath with patchelf "libQt5WebEngineWidgets.so" : ""

解决:

$ sudo apt-get install -y patchelf
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  aptdaemon aptdaemon-data python-pwquality python3-aptdaemon python3-aptdaemon.gtk3widgets python3-defer
使用'sudo apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
  patchelf
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 43 个软件包未被升级。
需要下载 45.4 kB 的归档。
解压缩后会消耗 126 kB 的额外空间。
获取:1 http://archive.kylinos.cn/kylin/KYLIN-ALL 10.0/universe amd64 patchelf amd64 0.9-1~kord16.04.3 [45.4 kB]
已下载 45.4 kB,耗时 0秒 (249 kB/s)
正在选中未选择的软件包 patchelf。
(正在读取数据库 ... 系统当前共安装有 231345 个文件和目录。)
正准备解包 .../patchelf_0.9-1~kord16.04.3_amd64.deb  ...
正在解包 patchelf (0.9-1~kord16.04.3) ...
正在处理用于 man-db (2.7.5-1kord) 的触发器 ...
正在设置 patchelf (0.9-1~kord16.04.3) ...

继续运行linuxdeployqt package -appimage

报错 sh: 1: appimagetool: not found

appimagetool这又是个什么,查询发现,就是为了将软件打成一个整体包,可以到处使用,参考:什么是AppImage
个人认为,这个参数可以不加,在无影响

运行 linuxdeployqt package

完美通过!

参考:Ubuntu下使用linuxdeployat打包发布免安装的Qt程序
linux-ubuntu下使用linuxdeployqt+appimagetool将qt程序打包成xxx.AppImage文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenCoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值