900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 树莓派3B+ QT5.9.6交叉编译环境搭建指导

树莓派3B+ QT5.9.6交叉编译环境搭建指导

时间:2024-01-08 08:21:33

相关推荐

树莓派3B+ QT5.9.6交叉编译环境搭建指导

----.04.22更新(本人基于最新的版本树莓派镜像根据本博文安装QT5.9.8成功)

本人这边为树莓派3B+ 使用的QT源码和IDE版本均为QT5.9.6,镜像为-10-09-raspbian-stretch.img

1.将刚烧录好-10-09-raspbian-stretch.img镜像的SD卡插入到树莓派中,启动系统

2.(树莓派) 树莓派通过sudo raspi-config命令配置一些参数

修改用户密码 (1. change user password)

树莓派默认账号是 username: pi, password: raspberry

修改启动项 (2. boot options -> B1 Desktop / CLI),选择启动界面为控制台,而不是图形界面

这里要说明的是,如果家里只有 WiFi 而没有以太网,建议这里先不设置,因为后面需要使用图形界面连接网络

可以在后面运行 Qt 程序之前再设置

修改显存大小 (7. advanced options -> A3 Memory Split),设置大小为 256M

修改结束后重新启动

3.(树莓派) 树莓派更新固件和驱动

sudo rpi-update

sudo reboot

4.(树莓派) 树莓派更新程序并安装必要的文件

首先修改/etc/apt/sources.list文件 (注意要用管理员权限), 去掉deb-src所在这一行头部的#号,解开注释(注意:其他源不要修改,不要使用国内镜像源,不然下面2的操作会失败的)

更新必要的库

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

5.(树莓派) 在树莓派新建文件夹

sudo mkdir /usr/local/qt5pi

sudo chown pi:pi /usr/local/qt5pi

6.(主机) 在主机安装 gcc 交叉工具链

注意: 这里没有采用树莓派 github 上提供的工具链,主要原因是那个工具链太老了,4.8 版本的 gcc。

这里推荐 linaro 的gcc 工具链,版本为 6.3,32 位和 64 位主机请选择各自对应的工具链,下载好后解压到~/raspi文件夹中

具体路径为:/home/galaxy/raspi/gcc-linaro-6.3.1-.05-x86_64_arm-linux-gnueabihf

7.(主机) 主机创建sysroot,这是 Qt5 之后官方推荐的一种编译方案,类似于在主机上提供编译 ARM 版本 Qt 所需要的库和头文件等环境,实现交叉编译

cd /home/galaxy/raspi

mkdir sysroot sysroot/usr sysroot/opt

rsync -avz pi@raspberrypi.local:/lib sysroot

rsync -avz pi@raspberrypi.local:/usr/include sysroot/usr

rsync -avz pi@raspberrypi.local:/usr/lib sysroot/usr

rsync -avz pi@raspberrypi.local:/opt/vc sysroot/opt

请注意:

下面的raspberrypi.local是 树莓派的 IP 地址,它必须和主机在同一个局域网下,可以直连,也可以通过路由器

rsync命令将远程的树莓派的文件同步到主机,这里可能耗时比较长,取决于网络质量。需要说明的是,有些博客会将整个 rootfs 的所有文件都同步到主机,即rsync -avz pi@raspberrypi.local:/ sysroot,这样要传输的文件实在是太多了,不推荐这么做。

如果在传输时,出现permission denied,说明有些文件传输需要管理员权限,不用管它,一般这些文件不是很重要

如果出现connection refused错误,说明需要在树莓派上开启 ssh 服务,可以去 google 找一下怎么开启

8.(主机) 修复同步带来的路径问题

wget /riscv/riscv-poky/priv-1.10/scripts/sysroot-relativelinks.py

chmod +x sysroot-relativelinks.py

./sysroot-relativelinks.py sysroot

这里下载链接已经失效了,我将我前面下载下来的脚本提供出来

/download/zz531987464/11133746

直接下载下来按照上面的命令运行即可。

9.(主机) 主机上配置 Qt ,可以直接下载 Qt 源码或者去 Qt 的 Git 库下载对应版本的模块,我这里采用第一种方式

源码地址如下:https://www1.qt.io/offline-installers/,选择下载 Linux/macOS 对应的tar.xz 文件,解压,命令行切换到 Qt 源码根目录,输入如下配置命令:

./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/raspi/gcc-linaro-6.3.1-.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -no-use-gold-linker -no-gbm -skip qtlocation -skip qtscript -skip qtwebengine -v

64 位主机采用-device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-,32 位主机采用-device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-

对于 5.9.1 或更高版本的 Qt,添加-no-use-gold-linker选项,我上面已经加了

这里有一个 Bug,所以需要加上-no-gbm,否则 Qt 编译会出错

不编译qtlocation和qtscript模块,这两个模块编译时也会出错

注意,如果不是树莓派3, 则选择对应的 device 选项:inux-rasp-pi-g++for RPi,linux-rasp-pi2-g++for RPi2 andlinux-rasp-pi3-g++for RPi3.

上面的命令中,-extprefix ~/raspi/qt5pi指定了 Qt 交叉编译库存放位置,-hostprefix ~/raspi/qt5指定了Qt 编译的可执行工具存放的位置,比如 qmake

make -j4

make install

10.(主机) 部署 Qt 库到树莓派 ,同步 Qt 库到先前创建的文件夹

rsync -avz qt5pi pi@raspberrypi.local:/usr/local

11.(树莓派) 树莓派更新库依赖索引文件

注意: 由于最新版本的 raspbian 镜像已经自带 qt5 库文件了,所以为了避免混淆,我们设为00-qt5pi.conf,这样 qt 程序会首先依赖我们编译的库,而不是镜像自带的库

echo /usr/local/qt5pi/lib | sudo tee /etc/ld.so.conf.d/00-qt5pi.conf

sudo ldconfig

12.(树莓派) 修复 EGL 库 ,使用硬件 GPU ,而不是 mesa 实现的 OpenGL

在当前版本中,/opt/vc/lib/目录下的libEGL.so和libGLESv2.so变更为libbrcmEGL.so和libbrcmGLESv2.so

sudo mv /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup

sudo mv /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup

sudo ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0

sudo ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0

13.(树莓派) 添加遗失的 openGL 库的 软链接

(注意:在新版的树梅派镜像中,/opt/vc/lib/目录下的libEGL.so和libGLESv2.so变更为libbrcmEGL.so和libbrcmGLESv2.so,所以我们下面创建软链接的时候需要注意)

sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1 或sudo ln -s /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so.1

sudo ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2 或sudo ln -s /opt/vc/lib/libbrcmGLESv2.so /opt/vc/lib/libGLESv2.so.2

14.(主机) Qt例程测试 ,在主机交叉编译测试程序并传输到树莓派

cd qtbase/examples/opengl/qopenglwidget

~/raspi/qt5/bin/qmake

make

scp qopenglwidget pi@raspberrypi.local:/home/pi

15.(树莓派) 树莓派运行程序,完美

cd ~

chmod +x ./qopenglwidget

./qopenglwidget

可以看到当前qt bin程序运行成功

配置QT creator 本地编译环境

0. 首先下载QT Creator IDEqt-opensource-linux-x64-5.9.8.run

Tools -> Build & Run -> Compilers

手动添加编译器 C 和 C++ 各一个,如果是 64 位机器,还是使用~/raspi/gcc-linaro-6.3.1-.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

32 位主机同理

Tools -> Build & Run -> Debugger手动添加调试器gdb-multiarch,路径为主机上的路径/usr/bin/gdb-multiarch,没有这个软件的话直接在主机上sudo apt-get install gdb-multiarch安装即可,在Kit中的Debugger选择gdb-multiarch 有调试需要的话,还需要在树莓派端安装/usr/bin/gdbserver,我们可以通过在主机上交叉编译gdb-*.*.tar.xz源码包然后提取里面的gdbserver即可 a). tar xvfgdb-8.1.tar.xz ,然后进入该源码目录下交叉编译 b). ./configure --host=arm-linux-gnueabihf c). make即可d). 然后我们进入到gdb/gdbserver目录下,编译gdbserver,直接make,会在当前目录下生成gdbserver,然后我们拷贝该bin文件到树莓派的/usr/bin/目录下即可。

Tools -> Build & Run -> Qt Versions手动添加我们前面编译好的 Qt 版本,我们需要指定的是 qmake 的路径,我这里的路径是~/raspi/qt5/bin/qmake

Tools -> Devices手动添加 generic linux 设备,需要指定树莓派的 IP 地址,用户名和密码。在工程pro文件最后添加按安装到树莓派的路径target.path = /home/pi

INSTALLS += target

Tools -> Build & Run -> Kits手动添加新的套件,需要指定设备,qt 版本以及编译器和调试器,这都是我们前面设置好了的

从 Qt 例程里随便挑选一个,选择我们的 kits ,点击 “Run”,然后看到远程的树莓派直接运行程序了,并且可以添加断点实现调试功能

QT无法输入中文的解决方法:

/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts目录下的libfcitxplatforminputcontextplugin.so拷贝到

/opt/Qt5.9.8/5.9.8/gcc_64/plugins/platforminputcontexts

/opt/Qt5.9.8/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts

的两个目录下即可

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。