目录
一、在Ubuntu20.04配置aarch64交叉编译环境
二、在Ubuntu20.04下载并编译aarch64系统架构的Qt6源码
三、在arm64芯片板上配置Qt6环境
四、配置后出现的问题及解决办法
网上大多数文章都是针对Qt5版本的配置(不编译源码的话,搭建Qt5环境只需要半天(ˉ▽ˉ;)...),按照这些步骤进行Qt6的配置踩了很多坑,现在把我配置Qt6的整个过程记录下来,有这方面的需求可以参考一下,耗时一周多,属实不易/(ㄒoㄒ)/~~
1.第一步很重要!首先要看一下你的ubuntu系统是不是arm64位的,如果只是在windows上下个虚拟机来装的ubuntu系统,那么该系统架构是X86-64,而我需要的系统架构是aarch64的,这样弄出来的qt库跟交叉编译工具是不匹配的,也可以理解为要在ubuntu系统上搭建一个aarch64环境。当然,如果芯片板子上的内存足够,可以直接编译Qt源码,则可跳过这一步( ‵▽′)ψ。
说到内存,建议分配给虚拟机50~100G左右的内存(编译到一大半提示内存不够(╯‵□′)╯︵┻━┻)
具体步骤参考这篇文章:https://blog.csdn.net/u012841922/article/details/121048387
查看系统架构
sudo uname -a
2.更新软件源和升级更新软件(以下在aarch64系统架构里进行)
apt-get update
apt-get upgrade
3.下载交叉编译工具
apt-get install gcc-aarch64-linux-gnu
apt-get install g++-aarch64-linux-gnu
4.添加到环境变量中(这里vi可能会报错,因为这相当于一个新系统,很多东西都没有,自行下载即可)
vi /etc/profile
在文件末尾添加
export PATH="/usr/bin:$PATH"
输入以下指令或reboot重启使环境立即生效
source /etc/profile
5.查看版本(gcc/g++),有版本显示即可
aarch64-linux-gnu-gcc -v
1.首先下载Qt6.4.0的源码压缩包
下载地址:https://download.qt.io/official_releases/qt/6.4/6.4.0/single/
2.把下载的源码压缩包移动到aarch64环境目录中
sudo mv 下载源码的目录/qt-everywhere-src-6.4.0.tar.xz /rootfs/usr/bin/
3.chroot到aarch64系统中,进到/usr/bin/目录解压源码
tar -xvf qt-everywhere-src-6.4.0.tar.xz
4.解压完毕,进入到源码目录,修改文件
vi qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf
5.增加以下内容,并在每个编译器前面添加路径(板子芯片是armv8架构)
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts
具体如下:
6.查看Qt6源码文档(这一步容易被忽略)
cat README.md
主要看以下部分
这是编译qt6源码所需要的,我只有perl和python3,部分解决方法参考下面文章:
安装cmake:https://blog.csdn.net/qq_27350133/article/details/121994229
安装python:https://blog.csdn.net/GerZhouGengCheng/article/details/118468389
解决在编译过程中perl出现警告:https://blog.csdn.net/gusijin/article/details/105512007
安装ninja,直接终端执行以下指令即可
apt-get install ninja-build
安装xcb(图形界面):https://blog.csdn.net/luoyayun361/article/details/118493387
7.开始编译并安装
./configure -prefix /usr/bin/arm64qt6.4.0 -xplatform linux-aarch64-gnu-g++
其中-prefix为保存Qt库的路径,-xplatform为目标平台。
完成后再执行cmake,此过程需要较长时间,建议挂在一边摸鱼(bushi)。
cmake --build . --parallel
编译完成后进行安装
cmake --install .
最后Qt6源码库会安装在指定的目录下
8.可以查看下编出来的源码系统架构
cd arm64qt6.4.0/lib
readelf -h libQt6Xml.so
显示系统架构为aarch64即可,具体如下:
1.首先查看板子上的对应配置,比如交叉编译工具链(gcc/g++)、cmake等,具体安装步骤参考一、二步骤。(当然,如果是一开始直接在板上操作就可以跳过这一步了)如果某个配置在板子上原来就有,可以查看其版本,最好与上面的版本一致,比如查看cmake版本:
cmake --version
2.安装qtcreator,默认安装的版本是5.12.8的
sudo apt-get install qtcreator
3.用U盘把编出来的qt6源码拷贝到arm板上的/usr/bin/目录下
4.启动qtcreator
su
qtcreator
5.配置qt6环境
工具➡选项
编译器➡添加➡GCC➡C/C++
修改如下:
Qt Versions➡添加
构建套件➡添加
6.至此,aarch64环境的qt6基本配置完毕o(* ̄▽ ̄*)ブ,可以把项目文件放到芯片板子上看看效果了,以下是本人项目构建遇到的问题,在此记录一下,没有这些问题的可以忽略。
问题1:Could NOT find XKB (missing: XKB_LIBRARY XKB_INCLUDE_DIR) (Required is at least version "0.5.0")
sudo apt install libxkbcommon-dev
问题2: libOpenGL.so.0: cannot open shared object file: No such file or directory
1.在虚拟机根目录下查找该库文件,U盘拷贝以下三个系统架构为aarch64库文件
2.进到这三个库文件的目录下,并查看这三个文件
3.复制软连接文件
sudo cp -r -L libOpenGL.so U盘目录
复制到芯片目录/usr/lib/aarch64-linux-gnu,并覆盖一下软连接
sudo ln -sf libOpenGL.so.0 libOpenGL.so
sudo ln -sf libOpenGL.so.0.0.0 libOpenGL.so.0
问题3:error: GLSL 4.50 is not supported. Supported versions are: 1.10,1.20,1.30,1.00 ES,3.00 ES,3.10 ES,and 3.20 ES
sudo vi ~/.bashrc
在最后一行添加
export MESA_GL_VERSION_OVERRIDE=4.5
问题4:运行项目时显示的中文为空白方框
1.进到虚拟机的字体目录
cd /usr/share/fonts/truetype
2.把图中的arphic复制到板子上的对应目录下(其他字体没试过),并添加到环境变量中
vi /etc/profile
export QT_QPA_FONTDIR=/usr/share/fonts/truetype/arphic
3.输入以下指令或reboot重启使环境立即生效
source /etc/profile
问题5:没有安装pcl(这里直接命令安装,默认版本是1.10的)
sudo apt install libpcl-dev
总结:整个过程还是比较困难的,但也挺庆幸最终能实现预期效果的,中间有遗漏的步骤也请各位大佬见谅,毕竟移植系统啥的经常缺这缺那的,只能记住一些印象深的o_o ....,自行百度吧。好了,就先分享到这里ヾ( ̄▽ ̄)Bye~Bye~。