转载 树莓派+QT5.9.9交叉编译,100%可以使用的交叉编译
感谢原文作者: SimbaHiker
第一部分 系统编译
第一步: 清单
Rufus: https://github.com/pbatard/rufus/releases/download/v3.17/rufus-3.17.exe
VMware: 15.5.6
Ubuntu 14.04 64bit https://releases.ubuntu.com/trusty/ubuntu-14.04.6-desktop-amd64.iso
树莓派: raspberry pi 2 model B
raspberry pi img: 2019-04-08-raspbian-stretch.zip http://downloads.raspberrypi.org/raspbian/images/raspbian-2019-04-09/2019-04-08-raspbian-stretch.zip
QT: qt-opensource-linux-x64-5.9.6_2.run
http://mirrors.sjtug.sjtu.edu.cn/qt/archive/qt/5.9/5.9.6/qt-opensource-linux-x64-5.9.6.run
QT source code:
git clone git://code.qt.io/qt/qt5.git -b 5.9
cross-compile-tools: fixQualifiedLibraryPaths
原作者 上述部分文件链接 链接: 百度网盘 请输入提取码 提取码: z5h1
为防止失效, 也可以使用我的连接:https://pan.baidu.com/s/16oiFh7KQ8q2Hm-D58SOEAw 提取码: jfwe
第二步 基础准备
推荐使用Vmware, 因为其有快照功能 当需要进行下一个不确定的步骤时 可以使用快照功能, 一旦"失手", 可以快速复原
2.1 使用Vmware 加载Ubuntu 14 的iso 安装
2.2 安装 Vmware tools 并启用 共享
安装VMware tools 可以参考这里: VMware Tools安装_Death Note-优快云博客
如果是灰色的可以直接去VMware的安装目录中找到linux.iso, 加载到虚拟机的光驱中 然后解压执行 ./vmware-install.pl
启用共享可以参考这里: https://jingyan.baidu.com/article/d5c4b52ba4f3a3da570dc579.html
2.3 Ubuntu14 中的安装
sudo apt-get update
sudo apt-get -y install git
sudo apt-get install ia32-libs
当执行上面这条代码时 会出现如下图:
依次安装替代库:
sudo apt-get -y install lib32ncurses5
sudo apt-get -y install lib32z1
sudo apt-get -y install lib32bz2-1.0
然后是cross-compile-tools的库:
sudo apt-get -y install lib32stdc++6
QT编译需要安装的编译链:
sudo apt-get -y install g++
2.4 文件及文件夹准备
sudo mkdir /mnt/rasp-pi-rootfs/
sudo mkdir /mnt/rasp-boot/
mkdir ~/rpi
mkdir ~/rpi/cross-compile-tools
sudo mkdir /usr/local/rpi
# 下载好的文件
# 2019-04-08-raspbian-stretch.img
# tools.gz (如果使用git可以不用放这个文件)
# fixQualifiedLibraryPaths
# qt5.tar.gz(如果使用git可以不用放这个文件)
# 全部放在 前面配置的共享目录中, 此处假设在share\qt_raspi_build\下
# 复制文件
cp /mnt/hgfs/share/qt_raspi_build/2019-04-08-raspbian-stretch.img ~/rpi/
cp /mnt/hgfs/share/qt_raspi_build/fixQualifiedLibraryPaths ~/rpi/cross-compile-tools
# 以下两个文件如果使用git下载可以不用复制
cp /mnt/hgfs/share/qt_raspi_build/qt5.tar.gz ~/rpi/
cp /mnt/hgfs/share/qt_raspi_build/tools.gz ~/rpi/
# 加载树莓派镜像
cd ~/rpi/
fdisk -l 2019-04-08-raspbian-stretch.img
# 按照原文作者的做法
# 挂载偏移值计算 offset=98304*512=50331648
sudo mount -o offset=50331648 -t ext4 2019-04-08-raspbian-stretch.img /mnt/rasp-pi-rootfs/
# 挂载boot 同理offset=8192*512= 4194304
sudo mount -o offset=4194304 -t vfat 2019-04-08-raspbian-stretch.img /mnt/rasp-boot/
# 准备交叉编译链 按照原文作者的做法
# 如果使用 git
cd /usr/local/rpi
sudo git clone git://github.com/raspberrypi/tools.git
# 有个思想准备, 可能会很慢的...
使用下载的tools.gz的方法
sudo tar zxvf ~/rpi/tools.gz -C /usr/local/rpi/
#准备cross-compile-tools工具
cd ~/rpi/cross-compile-tools
chmod +x fixQualifiedLibraryPaths
sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ /usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc
上述命令执行后 显示:
# 编译QT源码库
# 使用git下载的方法
cd ~
git clone git://code.qt.io/qt/qt5.git -b 5.9
cd qt5/
./init-repository
# 这个真不推荐, 太慢了...
# 使用qt5.tar.gz的方法
cd rpi
tar zxvf qt5.tar.gz -C ~/
第三步 编译
从这一步开始 跟作者原文 稍有不同, 原文作者非常尽责的把中间 试错的过程都贴出来了, 我跟着照做了一遍, 那简直是一样一样的. 有兴趣的同学可以跟着试试, 最好是 先创建快照以后 再试.
原文中 直接按照第五步 中创建 软连接的方法 是会 出错的.
Too many levels of symbolic links
需要变更一下 原文中创建软连接的顺序
cd /mnt/rasp-pi-rootfs/opt/vc/lib/
sudo ln -s libbrcmEGL.so libEGL.so
sudo ln -s libbrcmGLESv2.so libGLESv2.so
sudo ln -s libEGL.so libEGL.so.1
sudo ln -s libGLESv2.so libGLESv2.so.2
cd /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf
sudo mv libEGL.so.1.0.0 libEGL.so.1.0.0_backup
sudo mv libGLESv2.so.2.0.0 libGLESv2.so.2.0.0_backup
sudo ln -s ../../../opt/vc/lib/libEGL.so libEGL.so.1.0.0
sudo ln -s ../../../opt/vc/lib/libGLESv2.so libGLESv2.so.2.0.0
配置:
cd ~/qt5/
./configure -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=/usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -make tools -prefix /usr/local/qt5pi -v -nomake examples -nomake tests -no-use-gold-linker
编译:
# j 后面的数字代表 多线程编译, 也可以直接make 不带参数
# 时间 不短, 足够抽根烟了
make -j4
sudo make install
第四步: 镜像烧写
按照原文步骤 又稍有不同
sudo sync
sudo sudo umount /mnt/rasp-pi-rootfs
# 复制到windows的共享目录中
# 自定义名称
cp ~/rpi/2019-04-08-raspbian-stretch.img /mnt/hgfs/share/qt_raspi_build/xxx.img
使用Rufus 烧录进SD卡, 放入树莓派 2 Model B中 就可以启动了.
第二部分 程序编写与配置
第二部分跟原文相同, 原文链接: 树莓派+QT5.9.9交叉编译(QT环境配置篇)
为防止 被湮灭在网络中, 特意搬迁在此.
另外是前面描述使用5.9.9,现在为什么换成了5.9.6的QT,我们这里主要用到QT的qtctreator和qmake(桌面版本),在使用5.9.9会出现dbus库版本过旧的问题,更新库后还要更新一堆库,所以退而求其次使用5.9.6版本。我们使用的紧是5.9.6版本中的qcreator,我们核心编译器已经是5.9.9了。
到官网上下载,Index of /archive/qt
下载的版本是qt-opensource-linux-x64-5.9.6.run,使用WinScp下载到虚拟机中。
添加可执行权限
chmod +x qt-opensource-linux-x64-5.9.6.run ./qt-opensource-linux-x64-5.9.6.run
第二步 qt安装
然后选择组件进行安装。
需要有在官网注册个QT账号。
输入账号和密码后,默认安装即可。
配置选择,然后就是下一步直到完成。
第三步 准备工作
在前一章节中,我们烧写镜像时将镜像文件取消挂载。现在我们需要用到镜像文件中的qmake 和交叉编译环境,需要重新挂载镜像。
cd ~/rpi sudo mount -o offset=50331648 -t ext4 2019-04-08-raspbian-stretch.img /mnt/rasp-pi-rootfs/
在~/Qt5.9.6/Tools/QtCreator/bin中找到qtcreator
cd ~/Qt5.9.6/Tools/QtCreator/bin ./qtcreator
QT5.9.9版本在14.04 x64系统中会弹出如下错误,如下图。
为了减少麻烦,我们直接选择了5.9.6版本QT。
第四步 qt配置
打开qtcreator
~/Qt5.9.6/Tools/QtCreator/bin/./qtcreator
Tools -> Options
编译链配置
下图被遮挡的编译链路径为: /usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
下图被遮挡的路径为: /usr/local/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc
好了从官方例程中打开一个工程,选择配置
先在linux下选择Desktop 进行编译并运行,这时会弹出一个错误
我们安装如下内容可解决。
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
安装完成后,我们关闭Qtcreator再次打开运行Demo
然后将Kit选择为RaspberryPi,然后进行Rebueld
这时我们可以在build-gallery-RaspberryPi-Release文件中找到树莓派可执行程序gallery
我如何将编译出的程序下载到树莓派中呢,方法挺多的:
1,使用winscp将程序先搬到windows中,再搬移到树莓派中;
2,直接下载到树莓派中。
此时 使用 U盘 拷贝 gallery 至 树莓派中运行时 界面上没有任何文字, 不必慌张, 可以参考最后一步, 复制字体文件 至 树莓派即可.
下面我们来讲下如何可以直接下载到树莓派中。
先启动手上的树莓派,然后查看下树莓派上的IP,让树莓派和我们现在的主机在同一个局域网内。
然后我们配置树莓派的IP和登录信息。注意:登录信息是树莓派的账号和密码。
成功连接如下图所示
点击OK 后我们再次配置Kits
修改工程文件pro修改target.path = /home/pi/,完成后就可以点击debug了。
由于我们现在没有安装字库,所以无法显示汉字。先准备好wqy-zenhei.ttc,用winscp先导入到树莓派的用户目录下。
sudo mkdir /usr/local/qt5pi/lib/fonts sudo mv wqy-zenhei.ttc /usr/local/qt5pi/lib/fonts
现在我们就可以编译Raspberry应用并下载到目标板执行。
好了 全文结束了