----2019.04.22更新(本人基于最新的2019版本树莓派镜像根据本博文安装QT5.9.8成功)
本人这边为树莓派3B+ 使用的QT源码和IDE版本均为QT5.9.6,镜像为2018-10-09-raspbian-stretch.img
1.将刚烧录好2018-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所在这一行头部的 # 号,解开注释
*
更新必要的库
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 工具链
<https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/>,版本为
6.3,32 位和 64 位主机请选择各自对应的工具链,下载好后解压到 ~/raspi 文件夹中
具体路径为:/home/galaxy/raspi/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf
7.(主机) 主机创建 sysroot ,这是 Qt5 之后官方推荐的一种编译方案,类似于在主机上提供编译 ARM 版本 Qt
所需要的库和头文件等环境,实现交叉编译
cd /home/galaxy/raspi
mkdir sysroot sysroot/usr sysroot/opt
rsync -avz [email protected]:/lib sysroot
rsync -avz [email protected]:/usr/include sysroot/usr
rsync -avz [email protected]:/usr/lib sysroot/usr
rsync -avz [email protected]:/opt/vc sysroot/opt
请注意:
* 下面的 raspberrypi.local 是 树莓派的 IP 地址,它必须和主机在同一个局域网下,可以直连,也可以通过路由器
* rsync 命令将远程的树莓派的文件同步到主机,这里可能耗时比较长,取决于网络质量。需要说明的是,有些博客会将整个 rootfs
的所有文件都同步到主机,即 rsync -avz [email protected]:/ sysroot,这样要传输的文件实在是太多了,不推荐这么做。
* 如果在传输时,出现 permission denied ,说明有些文件传输需要管理员权限,不用管它,一般这些文件不是很重要
* 如果出现 connection refused 错误,说明需要在树莓派上开启 ssh 服务,可以去 google 找一下怎么开启
8.(主机) 修复同步带来的路径问题
wget
https://raw.githubusercontent.com/riscv/riscv-poky/priv-1.10/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
这里下载链接已经失效了,我将我前面下载下来的脚本提供出来
https://download.csdn.net/download/zz531987464/11133746
<https://download.csdn.net/download/zz531987464/11133746>
直接下载下来按照上面的命令运行即可。
9.(主机) 主机上配置 Qt ,可以直接下载 Qt 源码或者去 Qt 的 Git 库下载对应版本的模块,我这里采用第一种方式
源码地址如下: https://www1.qt.io/offline-installers/
<https://www1.qt.io/offline-installers/> ,选择下载 Linux/macOS 对应的 tar.xz 文件
<http://download.qt.io/official_releases/qt/5.11/5.11.1/single/qt-everywhere-src-5.11.1.tar.xz>
,解压,命令行切换到 Qt 源码根目录,输入如下配置命令:
./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option
CROSS_COMPILE=
~/raspi/gcc-linaro-6.3.1-2017.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 and linux-rasp-pi3-g++ for RPi3.
* 上面的命令中,-extprefix ~/raspi/qt5pi 指定了 Qt 交叉编译库存放位置,-hostprefix ~/raspi/qt5
指定了Qt 编译的可执行工具存放的位置,比如 qmake
make -j4
make install
10.(主机) 部署 Qt 库到树莓派 ,同步 Qt 库到先前创建的文件夹
rsync -avz qt5pi [email protected]:/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
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 库的 软链接
sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1
sudo ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2
14.(主机) Qt例程测试 ,在主机交叉编译测试程序并传输到树莓派
cd qtbase/examples/opengl/qopenglwidget
~/raspi/qt5/bin/qmake
make
scp qopenglwidget [email protected]:/home/pi
15.(树莓派) 树莓派运行程序,完美
cd ~
chmod +x ./qopenglwidget
./qopenglwidget
可以看到当前qt bin程序运行成功
配置QT creator 本地编译环境
0. 首先下载QT Creator IDE
*
Tools -> Build & Run -> Compilers
手动添加编译器 C 和 C++ 各一个,如果是 64 位机器,还是使用
~/raspi/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
32 位主机同理
*
Tools -> Build & Run -> Debugger 手动添加调试器,
我的位置是
~/raspi/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb
, 32 位主机同理
*
Tools -> Build & Run -> Qt Versions 手动添加我们前面编译好的 Qt 版本,我们需要指定的是 qmake
的路径,我这里的路径是 ~/raspi/qt5/bin/qmake
*
Tools -> Devices 手动添加 generic linux 设备,需要指定树莓派的 IP 地址,用户名和密码
*
Tools -> Build & Run -> Kits 手动添加新的套件,需要指定设备,qt 版本以及编译器和调试器,这都是我们前面设置好了的
*
从 Qt 例程里随便挑选一个,选择我们的 kits ,点击 “Run”,然后看到远程的树莓派直接运行程序了,完美
本文档是基于
http://brunoliu.com/2018/07/14/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E6%A0%91%E8%8E%93%E6%B4%BE-3b-qt-5-11-%E5%92%8C-opencv-3-2-0/
<http://brunoliu.com/2018/07/14/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E6%A0%91%E8%8E%93%E6%B4%BE-3b-qt-5-11-%E5%92%8C-opencv-3-2-0/>
,感谢作者
热门工具 换一换