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

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

当两个系统全部安装好之后,将两个系统连上同一个局域网,最简单的做法就是连上同一个路由器。做完之后进入步骤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

选择好对应的版本,下载下来之后放入刚刚新建的文件夹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 +xsysroot-relativelinks.py

./sysroot-relativelinks.pysysroot

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

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

import sys

import os

# Take a sysroot directory and turn all the abolute symlinks and turn them into

# relative ones such that the sysroot is usable within another system.

if len(sys.argv) != 2:

print('Usage is ' + sys.argv[0] + '')

sys.exit(1)

topdir = sys.argv[1]

topdir = os.path.abspath(topdir)

def handlelink(filep, subdir):

link = os.readlink(filep)

if link[0] != '/':

return

if link.startswith(topdir):

return

#print('Replacing %s with %s for %s' % (link, topdir+link, filep))

print('Replacing %s with %s for %s' % (link, os.path.relpath(topdir+link, subdir), filep))

os.unlink(filep)

os.symlink(os.path.relpath(topdir+link, subdir), filep)

for subdir, dirs, files in os.walk(topdir):

for f in dirs + files:

filep = os.path.join(subdir, f)

if os.path.islink(filep):

#print('Considering %s' % filep)

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点击运行之后,登陆

我们可以在树莓派的/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

参考文献:

树莓派linux编译不了动态库,linux系统下的树莓派与Qt 5.12.3源码的交叉编译相关推荐

  1. linux链接时区分动态库,Linux修改时区的方法

    CentOS 和 Ubuntu 的时区文件是 /etc/localtime,但是在 CentOS7 以后 localtime 以及变成了一个链接文件 [root@centos7 ~]# ll /etc ...

  2. Linux命令行调用动态库,Linux动态链接库的使用

    动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现.通过shared和fPIC编译参数生产so动态链接库文件.程序在调用库函数时,只需要连接上这个库即可.例如下面实现一个简单的整数四 ...

  3. Centos7下RTL8188eu USB无线网卡(TP WN725N) 驱动源码下载和编译步骤

    Centos7下RTL8188eu USB无线网卡TP WN725N 驱动源码下载和编译步骤 一 准备编译环境 二 下载源代码 三 编译和安装 四 启用8188euko Centos7下RTL8188 ...

  4. 嵌入式linux学习笔记-- 对于动态库的一些操作 dlopen

    最近公司重构代码,看到了公司的一位经验丰富的工程师的一些C++ 操作 属实有被秀到,估计光看他写的代码都够我写很多总结了. 根据他写的代码以及公司未来的代码的一些规划 我也总结一些无关痛痒的知识吧. ...

  5. linux平台 加载动态库dlsym返回null

    linux 平台加载动态库通常使用dlopen,dlsym,dlclose三个函数实现 最近写了一个小程序,遇到dlsym总是调用失败返回空值,查找了很多相关的资料,确定动态库的创建有问题.下面是最初 ...

  6. FFmpeg编译成Android动态库

    项目需要,网上也有现成的FFmpeg Android动态库,但是本着亲力亲为的宗旨,做了不断地尝试,最终也是成功了,在此做一个笔记,以备日后查阅. 附上给我帮助的资料链接: 王英豪大神的博客 雷霄骅大 ...

  7. Win10编译FFmpeg-64位动态库

    在win10上编译FFmpeg 提供两种方法 1.利用Cygwin编译FFmpeg 通过安装Linux虚拟开发环境Cygwin然后在虚拟开发环境中编译FFmpeg. 1.首先,到 Cygwin官网下载 ...

  8. Linux下Qt 5.15.2源码下载及编译

    一.下载 Qt的官方下载地址:Qt Downloads Qt 5.15.2源码下载路径:/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2. ...

  9. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库

    Windows系统基于VS2019编译器编译获得VISP动态库 官网地址: Installation from source for Windows with Visual C++ 2019 (vc1 ...

最新文章

  1. matlab verilog 接口,使用SystemVerilog简化FPGA中的接口
  2. 安卓logcat工具apk_backdoorapk 安卓APK后门捆绑脚本
  3. n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...
  4. python闭包的应用场景_简单谈谈Python中的闭包
  5. Deploy简单配置记录
  6. [导入]完成可脚本调用的视频录制控件
  7. Zabbix 系统监控(三)VMware 虚拟平台监控、邮件告警、企业微信告警配置
  8. Mastering Oracle SQL学习笔记(join句法专题第五部份)
  9. 前端学习总结【103天】:CSS——不用JavaScript实现tab标签切换的两种方法
  10. 装双系统出现winload.efi,也就是安装win10,提示0xc0000359
  11. matlab特征值意义,特征值 - MATLAB Simulink - MathWorks 中国
  12. PDF Expert教程之批注功能详解
  13. PDA模拟中的问题1
  14. 电子量产工具:输入系统-输入管理单元测试
  15. c语言定义寄存器中的两位,汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数...
  16. 一文看懂 Theorem Theory Proposition Lemma Corollary Claim 的区别
  17. QVE音乐剪辑器制作手机铃声的方法
  18. leetcode 2448
  19. linux下给firefox安装flashplayer ubuntu下的cp,rm命令
  20. 解决:你的博文 XXXX 因涉及“版权不明”, 审核未通过,您可以修改相关内容后再次发布。

热门文章

  1. url模块和querystring模块
  2. Office 365管理员指引 17——Sharepoint 讨论版
  3. 成功的产品 = 做得好 + 卖得好
  4. 正确预测适合自己的职业
  5. 暴涨!BTC忠实粉丝转向BCH为BCH网络添砖加瓦
  6. GNU make manual 翻译(二十六)
  7. Windows XP Service Pack 3 RC2 简体中文版发布
  8. 主成分分析(PCA) Java
  9. [NOIP2012] 借教室
  10. GeoTrust 企业(OV)型 SSL证书