外界条件:虚拟机 X86 架构(Ubuntu 20系统64位), 开发板RK3568 ARM 架构(Ubuntu 18系统64位)2GB内存 32GB外存 带GPU。这里开发板如果能用高版本 Ubuntu 尽量用高版本的。
1,在虚拟机中编译Qt6.5.3
这一步,就和平常在自己电脑安装一个 Qt 库一样。
-
先到清华大学开源软件镜像网站下载 Qt6.5.3 的源码包,在虚拟机中解压。网站地址:Index of /qt/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror。
-
安装 CMake ,最低要求3.16版本,如果要静态编译,需要3.21及以上版本。我使用的3.27版本。
-
创建编译构建目录,防止污染源码包。配置构建,如果没问题的话,就可以构建了。
mkdir -p ~/dev/qt-build
cd ~/dev/qt-build
# 运行源码目录下的配置程序
~/Desktop/qt-everywhere-src-6.5.3/configure
cmake --build . --parallel
cmake --install .
# 安装完成后,默认安装在/usr/local目录下。安装完成后,就可以删除构建目录了,节约存储空间。
rm -r ~/dev/qt-build
至此第一步就完成了,参考了Qt官方的文档:Qt for Linux/X11 - Building from Source | Qt 6.6。
2,配置开发板及虚拟机,建立sysroot
目录
- 在开发板上,安装相关库。
$ sudo apt update
$ sudo apt full-upgrade
$ sudo reboot
$ sudo apt-get install libboost-all-dev libudev-dev libinput-dev libts-dev libmtdev-dev libjpeg-dev libfontconfig1-dev libssl-dev libdbus-1-dev libglib2.0-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev libgles2-mesa-dev mesa-common-dev libasound2-dev libpulse-dev gstreamer1.0-omx libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-alsa libvpx-dev libsrtp2-dev libsnappy-dev libnss3-dev "^libxcb.*" flex bison libxslt-dev ruby gperf libbz2-dev libcups2-dev libatkmm-1.6-dev libxi6 libxcomposite1 libfreetype6-dev libicu-dev libsqlite3-dev libxslt1-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libx11-dev freetds-dev libsqlite3-dev libpq-dev libiodbc2-dev firebird-dev libgst-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev libatspi2.0-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev libxtst-dev libpci-dev libcap-dev libxrandr-dev libdirectfb-dev libaudio-dev libxkbcommon-x11-dev
- 在虚拟机中,安装以下库。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get install make build-essential libclang-dev ninja-build gcc git bison python3 gperf pkg-config libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev
- 在虚拟机中构建
sysroot
目录,后面交叉编译需要用到。
# 要用到rsync命令,也可以用scp命令传文件。
sudo apt install rsync
# 这里我将sysroot目录名字取名为sysroot-gpu,你也可以取别的名字,后面指定路径的时候记得修改一下即可。
mkdir ~/Desktop/sysroot-gpu
cd ~/Desktop/sysroot-gpu
mkdir -p usr/include
mkdir -p usr/lib
mkdir lib
# 将开发板上的库文件传到虚拟机中
# 这里注意填你自己开发板的用户名和ip地址,和ssh命令差不多
rsync -avzS --rsync-path="rsync" --delete user@192.168.137.140:/lib/* lib/
rsync -avzS --rsync-path="rsync" --delete user@192.168.137.140:/usr/include/* usr/include/
rsync -avzS --rsync-path="rsync" --delete user@192.168.137.140:/usr/lib/* usr/lib/
# 安装symlinks工具,看看软链接文件是否链接正确
sudo apt install symlinks
cd ~/Desktop
symlinks -rc sysroot-gpu
# 如果有.so库文件的软链接指定不正确,修改为正确的。其它的不用管。
# 使用 ln -sf 目标库文件 软链接名称,类似下面这样。
gwj@ubuntu:~/Desktop/sysroot-gpu/usr/lib/aarch64-linux-gnu$ ln -sf ../../../lib/aarch64-linux-gnu/libbz2.so.1.0 libbz2.so
gwj@ubuntu:~/Desktop/sysroot-gpu/usr/lib/aarch64-linux-gnu$ ln -sf ../../../lib/aarch64-linux-gnu/libcrypt.so.1 libcrypt.so
3,下载交叉编译工具
到 linaro 网站上下载交叉编译工具,我下载的是 gcc-linaro-11.3.1-2022.06-x86_64_aarch64-