目录
引言
1 搭建gnome桌面
1.1 简介
1.2 安装gnome桌面
2 安装qt相关依赖
2.1 安装qt库及examples
2.2 安装qtcreator
3 使用打包工具打包qt demo
3.1 安装依赖工具
3.2 使用打包工具打包Qt demo
首先,还是让我们来重温一下armel、armhf和arm64的区别吧
eabi:embedded applicaion binary interface,嵌入式二进制接口
armel:arm eabi little endian的缩写,软件浮点。
armhf:arm hard float的缩写,硬件浮点。
arm64:64位的arm默认就是hf的,因此不需要hf的后缀。
接下来进入正题:
在roc1 AI card上运行的是ubuntu18.04 server系统,所以需要搭建一个桌面系统,在此选择的是gnome桌面系统。gnome是 the GNU Network Object Model Environment 的缩写,中文译为“GNU网络对象模型环境”于 1999 年首次发布,现已成为许多Linux发行版默认的桌面环境。gnome的特点是简洁、运行速度快,但是没有太多的定制选项,用户需要安装第三方工具来实现。所以,gnome适合那些不需要高度定制界面的用户。并且gnome在几款流行的 Linux 发行版中,比如 Ubuntu、Debian、OpenSUSE 等。
运行安装命令:
sudo apt-get install ubuntu-desktop
Ubuntu桌面从16.04开始使用gnome而不是Unity,由于系统ubuntu版本为18.04,所以桌面系统版本为gnome3.28。
运行桌面管理命令:
sudo apt-get install gdm3(用于管理多种桌面系统,并引导其启动)
开机重启登录,选择gnome-wayland,使用基于wayland的compositor,如果选择gnome则为x11的compositor。
下图为开机桌面:
由于要在gnome桌面上运行qt demo,所以有必要进行qt环境的搭建。
安装qt基础包:
sudo apt-get install qt5-default
该包安装过程中会将qmake也一并安装。
安装qt examples:
sudo apt-get install qtbase5-examples
安装命令:
sudo apt-get install qtcreator
安装完成之后,可以看到qtcreator的图标:
通过qtcreator可以创建一个简单的工程,编译运行demo。
目前需要对所写的软件进行打包,得到一个不依赖于环境的可执行的软件(环境是在Ubuntu18.04下)
1)安装patchelf
patchelf是一个开源工具,可直接增加、删除、替换 ELF 文件依赖的库文件,通过patchelf工具的add-needed参数来添加对动态库的依赖,让程序优先加载高版本库。
sudo apt-get install patchelf
2)安装linuxdeployqt
git clone linuxdeployqt源代码:
git clone https://github.com/probonopd/linuxdeployqt.git
进入linuxdeployqt文件夹:
cd linuxdeployqt
修改 tools/linuxdeployqt/main.cpp 源代码,注释掉源码中glcv版本判断的语句,可以通过指令 gedit tools/linuxdeployqt/main.cpp 来修改源码:
vim tools/linuxdeployqt/main.cpp
需要注释的代码如下:
// openSUSE Leap 15.0 uses glibc 2.26 and is used on OBS
/*if (strverscmp (glcv, "2.27") >= 0) {
qInfo() << "ERROR: The host system is too new.";
qInfo() << "Please run on a system with a glibc version no newer than what comes with the oldest";
qInfo() << "currently still-supported mainstream distribution (xenial), which is glibc 2.23.";
qInfo() << "This is so that the resulting bundle will work on most still-supported Linux distributions.";
qInfo() << "For more information, please see";
qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
return 1;
}*/
然后创建build目录:
mkdir build
进入build目录之后执行执行cmake命令:
cmake ..
执行make命令编译源代码:
make
编译完成后,在build目录下的 tools/linuxdeployqt/linuxdeployqt 中会生成一个可执行文件 linuxdeployqt,修改其权限,并为了方便之后使用,可以将该可执行文件复制到 /usr/local/bin 目录下:
cd ./tools/linuxdeployqt
sudo chmod a+x linuxdeployqt
sudo cp linuxdeployqt /usr/local/bin/
3)安装appimagetool
这个工具的作用是通过构建一个内核加载文件系统来打包可执行文件,由于是linux内核通用性好,所以打包文件系统在嵌入式linux中是一个非常常用手段。
下载工具:(注意区分arm,x86版本,以及23位和64位系统)
sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-aarch64.AppImage" -O /usr/local/bin/appimagetool
提供可执行权限:
sudo chmod a+x /usr/local/bin/appimagetool
至此打包的所有工具已经安装完毕
创建一个文件夹命名为test,我的目录为home/work/qtworkspace/test
选择 release 编译好的可执行文件,将该文件拷贝到一个test文件夹中,然后执行命令:
linuxdeployqt test –appimage
接下来就是等待打包完成。
在执行这条命令时可能会报如下错误:
Categories entry not found in desktop file
.desktop file is missing a Categories= key
该问题是由于在.desktop文件中少了一个属性Categories,所以我们需要在desktop文件中手动加入一行:
Categories=Application;
再次执行 linuxdeployqt 命令即可。编译完成后的文件组成:
双击Application-aarch64.Appimage即可运行
注意事项:
1)报错:appimagetool: error while loading shared libraries: libz.so: cannot open shared object file: No such file or directory
安装libz.so
sudo apt-get install zlib1g-dev zlib1g
2)报错sh: 1: appimagetool: Exec format error
appimagetool版本不对,请下载对应的版本: