1. 前言u(píng)nsetunset
需要在樹(shù)莓派上開(kāi)發(fā)基于Qt的應(yīng)用程序。想要開(kāi)發(fā)編譯程序,前提是必須有開(kāi)發(fā)環(huán)境。根據(jù)這需求嘗試了兩種方式:
- 直接在樹(shù)莓派上安裝Qt相關(guān)庫(kù)及環(huán)境,直接在樹(shù)莓派上編譯應(yīng)用程序并運(yùn)行。
- 在ubuntu上搭建Qt相關(guān)的交叉編譯環(huán)境,交叉編譯后放在樹(shù)莓派運(yùn)行。
方式1的好處是樹(shù)莓派上聯(lián)網(wǎng)后需要什么庫(kù)直接通過(guò)apt-get
安裝,簡(jiǎn)單方便、省時(shí)省力。缺點(diǎn)是在上面直接開(kāi)發(fā)Qt相關(guān)的程序,顯得有些捉襟見(jiàn)肘,不是很絲滑。最主要的一個(gè)原因是還有不能浪費(fèi)了我這個(gè)高配置的電腦,果斷選擇了在Ubuntu上搭建相關(guān)的開(kāi)發(fā)環(huán)境(這符合平時(shí)的開(kāi)發(fā)習(xí)慣)。
unsetunset2. 確定版本unsetunset
要搭建對(duì)應(yīng)樹(shù)莓派上的交叉編譯環(huán)境,必須要對(duì)應(yīng)好GCC和Qt的版本,防止版本不一致導(dǎo)致的莫名奇妙的問(wèn)題。
- 系統(tǒng): 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. 搭建交叉編譯環(huán)境unsetunset
- 系統(tǒng):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. 主機(jī)編譯(ubuntu24.04)unsetunset
安裝必要的環(huán)境
sudo apt-get install bison python gperf pkg-config gdb-multiarch
創(chuàng)建sysroot目錄
我們交叉編譯的程序是部署到樹(shù)莓派板卡環(huán)境運(yùn)行,需要構(gòu)建和樹(shù)莓派一樣的庫(kù)環(huán)境,我們需要?jiǎng)?chuàng)建一個(gè)sysroot目錄, 在編譯Qt時(shí)指定了 -sysroot=dir該邏輯目錄,編譯過(guò)程中需要引用的庫(kù),頭文件,就到 dir/xx 目錄下去找。
兩種方式:
- 直接復(fù)制樹(shù)莓派上的文件到sysroot
- 通過(guò)rsync同步樹(shù)莓派文件到sysroot
我采用第二種方式:
# ubuntu24創(chuàng)建sysroot目錄
mkdir -p ~/sysroot/usr
mkdir -p ~/sysroot/lib
cd ~
# 根據(jù)實(shí)際板卡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
編寫編譯腳本
編譯
# 直接運(yùn)行腳本
./autobuild.sh
# 生成的Qt庫(kù)位于腳本指定目錄下