1. 前言unsetunset
需要在树莓派上开发基于Qt的应用程序。想要开发编译程序,前提是必须有开发环境。根据这需求尝试了两种方式:
- 直接在树莓派上安装Qt相关库及环境,直接在树莓派上编译应用程序并运行。
- 在ubuntu上搭建Qt相关的交叉编译环境,交叉编译后放在树莓派运行。
方式1的好处是树莓派上联网后需要什么库直接通过apt-get
安装,简单方便、省时省力。缺点是在上面直接开发Qt相关的程序,显得有些捉襟见肘,不是很丝滑。最主要的一个原因是还有不能浪费了我这个高配置的电脑,果断选择了在Ubuntu上搭建相关的开发环境(这符合平时的开发习惯)。
unsetunset2. 确定版本unsetunset
要搭建对应树莓派上的交叉编译环境,必须要对应好GCC和Qt的版本,防止版本不一致导致的莫名奇妙的问题。
- 系统: Debian11
- GCC: gcc version 10.2.1 20210110 (Debian 10.2.1-6)
- Qt: 5.15.2
下载需要的软件包
- 10.2.1-2021.01-x86_64_aarch64-linux-gnu下载(https://snapshots.linaro.org/components/toolchain/binaries/10.2-2021.01-3/aarch64-linux-gnu/)
- Qt5.15.2官方下载(https://download.qt.io/archive/qt/5.15/)
unsetunset3. 搭建交叉编译环境unsetunset
- 系统:Ubuntu24.04
解压工具链到指定目录
tar xvf gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu.tar.xz -C /opt
解压Qt源码到指定目录
tar xvf qt-everywhere-src-5.15.2.tar.xz -C /opt
4. 主机编译(ubuntu24.04)unsetunset
安装必要的环境
sudo apt-get install bison python gperf pkg-config gdb-multiarch
创建sysroot目录
我们交叉编译的程序是部署到树莓派板卡环境运行,需要构建和树莓派一样的库环境,我们需要创建一个sysroot目录, 在编译Qt时指定了 -sysroot=dir该逻辑目录,编译过程中需要引用的库,头文件,就到 dir/xx 目录下去找。
两种方式:
- 直接复制树莓派上的文件到sysroot
- 通过rsync同步树莓派文件到sysroot
我采用第二种方式:
# ubuntu24创建sysroot目录
mkdir -p ~/sysroot/usr
mkdir -p ~/sysroot/lib
cd ~
# 根据实际板卡IP和用户,修改下面
rsync -avz --rsync-path="sudo rsync" --delete raspberry@192.168.100.10:/lib sysroot/lib
rsync -avz --rsync-path="sudo rsync" --delete raspberry@192.168.100.10:/usr/include sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete raspberry@192.168.100.10:/usr/lib sysroot/usr
编写编译脚本
编译
# 直接运行脚本
./autobuild.sh
# 生成的Qt库位于脚本指定目录下