分享

linux系统下的树莓派与Qt 5.12.3源码的交叉编译

 魅影苍穹 2020-03-03

{写在前面:按照这个方法,基本可以成功在linux系统下交叉编译Qt5.12.3,其他版本的源码也编译}

我的环境:Linux Mint 19.1;树莓派 3;Qt源码5.12.3

步骤1:安装linux Mint,具体网址https://www./download.php

             安装树莓派系统 ,具体网址https://www./downloads/raspbian/

             当两个系统全部安装好之后,将两个系统连上同一个局域网,最简单的做法就是连上同一个路由器。做完之后进入步骤2.

步骤2:{树莓派}:1.将树莓派的软件源给替换掉

                               修改 /etc/apt/sources.list 和  /etc/apt/sources.list.d/raspi.list

                             2.执行下面命令进行更新

                              sudo apt-get update

                              sudo apt-get upgrade

                              sudo rpi-update

                              sudo reboot

                              sudo mkdir /usr/local/qt5pi

                              sudo chown pi:pi /usr/local/qt5pi

                             3.打开树莓派的SSH

步骤3:{Linux Mint}:1.新建一个文件夹,用来存放编译的一些文件

                                 执行命令:mkdir ~/RaspiTest

                                2.安装交叉编译的工具链,具体网址https://releases./components/toolchain/binaries/6.3-2017.05/

                                   选择好对应的版本,下载下来之后放入刚刚新建的文件夹RaspiTest中。

                                   这里我选择的文件是 arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz

                                3.将树莓派的一些文件同步到Mint中来。在RaspiTest中新建sysroot文件夹。紧接着执行如下命令

                                                rsync -avz pi@192.168.1.2:/lib sysroot

                                                rsync -avz pi@192.168.1.2:/usr/include sysroot/usr

                                                rsync -avz pi@192.168.1.2:/usr/lib sysroot/usr

                                                rsync -avz pi@192.168.1.2:/opt/vc sysroot/opt

                                    这个标红的IP地址,就是树莓派所在局域网的IP地址。执行命令时,先查看一下自己的树莓派的IP地址,然后替换我给出的命令中的IP地址即可。如果不嫌文件多,也可以执行rsync -avz pi@192.168.1.2:/ sysroot这条语句会把树莓派rootfs 的所有文件都同步到Mint中。

                                4.修复同步带来的路径问题。执行下面的命令

                                 chmod +x sysroot-relativelinks.py

                                 ./sysroot-relativelinks.py sysroot

                               我是将sysroot-relativelinks.py文件与sysroot放在同一级目录。(都是放在~/RaspiTest 

                               下面的python代码就是sysroot-relativelinks.py中的代码。

  1. import sys
  2. import os
  3. # Take a sysroot directory and turn all the abolute symlinks and turn them into
  4. # relative ones such that the sysroot is usable within another system.
  5. if len(sys.argv) != 2:
  6. print('Usage is ' + sys.argv[0] + '<directory>')
  7. sys.exit(1)
  8. topdir = sys.argv[1]
  9. topdir = os.path.abspath(topdir)
  10. def handlelink(filep, subdir):
  11. link = os.readlink(filep)
  12. if link[0] != '/':
  13. return
  14. if link.startswith(topdir):
  15. return
  16. #print('Replacing %s with %s for %s' % (link, topdir+link, filep))
  17. print('Replacing %s with %s for %s' % (link, os.path.relpath(topdir+link, subdir), filep))
  18. os.unlink(filep)
  19. os.symlink(os.path.relpath(topdir+link, subdir), filep)
  20. for subdir, dirs, files in os.walk(topdir):
  21. for f in dirs + files:
  22. filep = os.path.join(subdir, f)
  23. if os.path.islink(filep):
  24. #print('Considering %s' % filep)
  25. handlelink(filep, subdir)

                                 5.下载Qt源码,到Qt官网中下载想要编译的源码。选择下载 Linux/macOS 对应的 tar.xz 文件,然后解压到~/RaspiTest 中。然后通过cd命令进入到Qt源码目录中。

                                6.进入到源码的根目录中后,输入如下命令,并运行。

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

                                   “注意”  (I)对于 5.9.1 或更高版本的 Qt,添加 -no-use-gold-linker 选项。(II)需要加上 -no-gbm ,否                         则 Qt 编译会出错。

                                这一步很关键,一定不能出错。

                               等命令执行完之后输入make -j4 

                               等命令执行完之后输入make install

                             7.将编译好的Qt库同步到树莓派中,执行下面的命令。

                              cd ~/RaspiTest

                              rsync -avz qt5pi pi@192.168.1.2:/usr/local

步骤4.{树莓派} :1.由于最新版本的 raspbian 镜像已经自带 qt5 库文件了,所以为了避免混淆,我们设为 00-qt5pi.conf ,这样                            qt程序会首先依赖我们编译的库,而不是镜像自带的库。执行如下命令:  

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

                      sudo ldconfig

                                2.修复 EGL 库 ,使用硬件 GPU 。执行如下命令:

   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
 

步骤5:{Mint}:QtCreator的配置

1.在设备选项里面先链接一下树莓派 

2.添加编译器。手动添加编译器 C 和 C++ 各一个,如果是 64 位机器,还是使用 ~/RaspiTest/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc;~/RaspiTest/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++。(根据实际安装的路径来

3.qmake设置,如果一直按照上面的步骤来的话,应该是在~/RaspiTest/qt5/bin/qmake

4.套件设置

5.测试.{Mint}

新建一个空的界面程序,在pro文件中写下

# Default rules for deployment.

qnx: target.path = /home/pi

else: unix:!android: target.path = /home/pi

!isEmpty(target.path): INSTALLS += target

  1. 点击运行之后,登陆
  2. 我们可以在树莓派的/home/pi目录中看到打包好的文件,用命令行运行,如果能运行出,那就没问题了,如果不能运行出,应该就是树莓派一下依赖库的问题。

写在最后:

1.我在点击运行之后出现如下错误,不过不影响在树莓派上的运行,等晚上找个时间解决一下。

2.在树莓派上运行交叉编译的程序时,可能会报libGLESv2.so.2的错误,最粗暴的解决方法就是将在/opt/vc/lib内找到该文件然后复制一份放到/usr/local/qt5pi/lib内。

3.可能是我树莓派OpenGL配置的问题,涉及到OpenGL的提示无法打开,widget和qml亲测可以运行。欢迎大家交流

     希望各位前辈斧正提点!

     请大家多多交流,指出问题。

4.出现如下问题,,等晚上找个时间解决一下

EGL Error : Could not create the egl surface: error = 0x300b

参考文献:

https://blog./blog/2017/05/03/qt-git-tinkerboard-wayland/

https://blog.csdn.net/zz531987464/article/details/83218345

https://www.cnblogs.com/katachi/articles/8413162.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多