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庫位于腳本指定目錄下