交叉编译并部署Qt5.12.4到树莓派3B+

        这个教程将指导你如何在电脑上交叉编译Qt 5.12.4并安装到树莓派。这样你就可以在电脑上用Qt Creator设计和编译树莓派的应用,然后直接在树莓派上运行和调试。

 

硬件

这篇教程使用树莓派3B+和Qt 5.12.4。电脑的操作系统是Linux(ubuntu 64位),树莓派的操作系统是Raspbian Stretch with desktop

 

准备工作

在命令行界面使用以下命令更新固件,更新完成后重启系统。

sudo rpi-update
reboot

确保树莓派上的SSH协议已经打开。后续Qt Creator需要通过SSH和树莓派通信。可以执行以下命令打开设置界面,选择Interfacing Options,选择ssh,选择yes然后finish

sudo raspi-config

以下清单总结了交叉编译Qt 5.12.3的主要步骤,我们将在这篇文章中逐一介绍。[PI]表示在树莓派上操作,[PC]表示在电脑上操作。

    1. [PI] 安装开发包

    2. [PI] 准备目标文件夹

    3. [PI] 配置调试及运行环境

    4. [PC] 创建工作文件夹并设置工具链

    5. [PC] 创建和配置sysroot

    6. [PC] 下载Qt

    7. [PC] 配置Qt

    8. [PC] 编译、安装和部署Qt

    9. [PC] 配置Qt Creator实现交叉编译树莓派的应用

    10. [PI] 复制字体

 

1 [PI] 安装开发包

首先在/etc/apt/sources.list文件中取消注释deb-src这行。

sudo leafpad /etc/apt/sources.list

下一步是更新,然后下载需要的开发包。

sudo apt-get update
sudo apt-get build-dep qt4-x11
sudo apt-get build-dep libqt5gui5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev libraspberrypi-dev libpq-dev libmariadbclient-dev bluez libbluetooth-dev build-essential

 

2 [PI] 准备目标文件夹

这步是在树莓派的pi用户下创建/usr/local/Qt5.12.4文件夹,后面编译好的Qt库会从电脑部署到这个文件夹。

sudo mkdir /usr/local/Qt5.12.4
sudo chown pi:pi /usr/local/Qt5.12.4

3 [PI] 配置调试及运行环境

编译好的可执行文件会放在树莓派的/opt目录下,但默认的pi用户没有创建文件夹或文件的权限,需要在根目录执行:

sudo chmod -R 777 /opt

远程调试时需要安装gdbserver

sudo apt-get install gdbserver

增加分辨率设置:

sudo leafpad ~/.profile

在其中增加:

# physical display properties
export QT_QPA_EGLFS_PHYSICAL_WIDTH=1920
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=1080

然后执行:

source .profile

4 [PC] 创建工作文件夹并设置工具链

在电脑上创建工作文件夹。

mkdir ~/raspi
cd ~/raspi

linaro上下载交叉编译工具链,包括gccruntimesysroot三项:

下载后解压并合并,放在~/raspi/cross-compile-tool/目录下

 

如果电脑上没有C/C++编译环境,执行:

sudo apt-get install build-essential

如果是openSUSE,执行:

sudo zypper install -t pattern devel_basis

使64位系统兼容32位的库:

sudo apt install lib32ncurses5 lib32z1

5 [PC] 创建和配置sysroot

sysroot是树莓派上的文件在PC上的拷贝,编译过程中需要的头文件、库等会在这里查找。

mkdir sysroot sysroot/usr sysroot/opt

我们可以使用rsync进行树莓派和sysroot之间的同步。如果电脑上的sysroot文件夹发生任何变化,都会被自动同步到树莓派上。raspberrypi_ip代表树莓派的网络名或IP地址。

rsync -avz pi@raspberrypi_ip:/lib sysroot
rsync -avz pi@raspberrypi_ip:/usr/include sysroot/usr
rsync -avz pi@raspberrypi_ip:/usr/lib sysroot/usr
rsync -avz pi@raspberrypi_ip:/opt/vc sysroot/opt

下一步,我们需要将sysroot中的符号链接调整为相对的,因为这个文件夹在电脑和树莓派上都会有。

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

6 [PC] 下载Qt

下载并解压Qt 5.12.4,当然其他版本也可以。

wget http://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
tar xvf  qt-everywhere-src-5.12.4.tar.xz
cd  qt-everywhere-src-5.12.4

8 [PC] 配置Qt

编辑./qtbase/mkspecs/devices/linux-rasp-pi3-g++/qmake.conf文件:

    ① 分别将所有的-lEGL替换成-lbrcmEGL-LGLESv2替换成-lbrcmGLESv2

    ② 修正文件中的4处错误,修正后如下:

VC_LIBRARY_PATH         = $$[QT_SYSROOT]/opt/vc/lib
VC_INCLUDE_PATH         = $$[QT_SYSROOT]/opt/vc/include

VC_LINK_LINE            = -L$${VC_LIBRARY_PATH}

QMAKE_LIBDIR_OPENGL_ES2 = $${VC_LIBRARY_PATH}

配置Qt库:

./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/raspi/cross-compile-tool/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/Qt5.12.4 -extprefix ~/raspi/Qt5.12.4 -hostprefix ~/raspi/Qt5.12.4-host -no-use-gold-linker -v -no-gbm

 

9 [PC] 编译、安装和部署Qt

这一步大概需要2~3小时。

make
make install

编译完成后使用rsync命令将编译好的Qt库同步到树莓派。

rsync -avz Qt5.12.4 pi@raspberrypi_ip:/usr/local

10 [PC] 配置Qt Creator实现交叉编译树莓派的应用

如果电脑上还没有Qt Creator,需要首先下载并安装。然后根据以下步骤配置交叉编译。

首先,打开Qt Creator,进入工具 -> 选项菜单,选择设备->设备,点击添加,选择通用Linux设备

给这个配置起个名字(Raspberry Pi),填好网络名或IP、用户名(pi)、密码(默认是raspberry)。

向导完成前会验证到树莓派的连接,之后在Qt Creator中会多出一个新的设备。

下一步,在Kits编译器页中,添加针对树莓派的GCC CC++ 交叉编译器。

GCC的C编译器在~/raspi/cross-compile-tool/bin/arm-linux-gnueabihf-gcc。C++的编译器以及调试器也在同一路径下。

 

Kits -> Qt Version中添加一个Qt版本,在~/raspi/Qt5.12.4-host/bin/qmake

最后,在Kit中添加一个新的kit,设置名称以及图标,以及其他设置如下:

Device type: Generic Linux Device
Device: Raspberry Pi (defaut for Generic Linux)
Sysroot: ~/raspi/sysroot
Compiler C: GCC (Raspberry Pi)
Compiler C++: GCC (Raspberry Pi)
Debugger: GDB (Raspberry Pi)
Qt version: Qt 5.12.4 (Raspberry Pi)

到底为止所有的配置已经完成,你可以创建一个新工程并选择刚才创建的kit:Raspberry Pi。

 

现在可以在电脑上设计、编译、部署,在树莓派上运行和调试了。

注意:目前没找到远程调试时比较好的可以显示窗口的办法。可以在PC上安装VNC Viewerhttps://www.realvnc.com/en/connect/download/viewer/linux/),在Qt CreatorProject - Run - Run - Command line argumens中增加-platform vnc,然后用VNC Viewer连接即可。注意要先在Qt Creator中启动调试,再用VNC Viewer连接。

11 [PI] 复制字体库

安装中文字体库:

sudo apt-get install ttf-wqy-zenhei

复制中文字体库:将/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc 复制到 /usr/local/qt5pi/lib/fonts

复制英文字体库:将/usr/share/fonts/truetype/dejavu 中的文件复制到 /usr/local/qt5pi/lib/fonts

  • 10
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值