ubuntu 交叉编译qt 5.7 程序到 arm 开发板
ubuntu 交叉编译qt 5.7 程序到 arm 开发板
平台
1 ubuntu 12.04
2 arm-linux-gcc 4.5.1
3 QT 5.7
4 开发板210 armcortex-A8
一 概述
QT5的ARM移植及其中文显示
二 准备工具
1.交叉编译工具(arm-linux-gnueabi-4.5.1.tar.bz2)
2.交叉编译好的Qt库(armqt5.5-gec.all.fonts.tar.bz2)
3.要用到的库(Qt依赖的库)(armlib-all.tar.bz2,字体,触摸屏,总线)tslib库,(armqt5.5-gec下载到开发板(只下载里面的(lib, plugins))
三 交叉编译环境搭建
1 源码编译 (ARM版本 开发板运行环境搭建) 从 http://www.qt.io/download-open-source/下载 Qt 源代码进行交叉编译
2 把源代码到 qt-everywhere-opensource-src-5.5.0.tar.gz 下载到 linux 系统的某个目录下面解压, 进入 qt-everywhere-opensource-src-5.5.0 目录交叉编译 Qt 源代码得到 ARM 平台的 Qt
3 准备:
4 arm 的工具链--这里用的是 arm-linux-gcc(4.5.1)
5 修改 qt-everywhere-opensource-src-5.5.0/qtbase/mkspeces/linux-arm-gnueabi-g++/qmake.conf
在文件最前面添加一行 QT_QPA_DEFAULT_PLATFORM=linuxfb 并且把 arm-linux-gnueabi-
改为自己系统中安装的 arm 工具链名称这里改为 arm-linux-
6 配置
./configure -v --prefix=/opt/armqt5.5-gec/ -release -make libs -xplatform linux-arm-gnueabi-g++
-optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-libjpeg -qt-zlib -qt-freetype -no-sse2
-no-opengl -no-openssl -no-nis -no-cups -no-glib -no-iconv -no-xcursor -no-xfixes -no-xrandr
-no-xrender -no-separate-debug-info -nomake tools -nomake examples
-I/home/tiydy/armlib/tslib/include -L/home/tiydy/armlib/tslib/lib
为了是 Qt5 支持 tslib 添加下路径编译触摸插件
-I/home/tiydy/armlib/tslib/include 为 tslib 的头文件路径
-L/home/tiydy/armlib/tslib/lib 为 tslib 的库文件路径
配置后运行 make -j 4 (可以 4 个目标一起构建提高编译速度)
编译后运行 make install (就会把 Qt 安装在/opt/armqt5.5-gec/目录下了)
把/opt/armqt5.5-gec/目录下的 lib 和 plugins 目录拷贝到开发板/opt/armqt5.5-gec 目录就可以并
且在开发板/etc/profile 文件中添加下面配置
export QTDIR=/opt/armqt5.5-gec
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export LD_PRELOAD=/tslib/lib/libts.so
export QT_QPA_GENERIC_PLUGINS=tslib
export LD_LIBRARY_PATH=/tslib/lib:$QTDIR/lib
四 PC交叉编译程序
1 安装交叉编译工具(4.5.1)
(安装交叉编译工具arm-linux-g++/gcc 把arm-linux-gnueabi-4.5.1.tar.bz2解压到/opt目录下)
# ~/armQt$ cp arm-linux-gnueabi-4.5.1.tar.bz2 /opt/
进入/opt目录
# tar -jxf arm-linux-gnueabi-4.5.1.tar.bz2
# mv usr/local/arm/4.5.1/ ./
2 安装交叉编译好的Qt库
(安装编译好的Qt库,把armqt5.5-gec.all.fonts.tar.bz2 解压到/opt目录下)
gec@ubuntu:~/armQt$ cp armqt5.5-gec.all.fonts.tar.bz2 /opt/
进入/opt目录解压
gec@ubuntu:/opt$ tar -jxf armqt5.5-gec.all.fonts.tar.bz2
3 设置交叉编译工具环境变量 ,路径据ubuntu实际
查看环境变量配置的路径 # echo $PATH
3.1 方法1
gec@ubuntu:/opt$ export PATH=/opt/4.5.1/bin/:$PATH (放入配置文件/etc/bash.bashrc)
3.2 方法2 环境配置文件 编辑vi /etc/profile, 重启 source /etc/profile (注意:用source重启只用本终端有效,编译的哪个终端也要重启,不然环境还没改过来,)
export PATH=/opt/usr/local/arm/4.5.1/bin/:$PATH //:$PATH (代表以前的)要写在后面, 设置的要放在以前的前面,优先使用以前的
export PATH=/opt/armqt5.5-gec/bin/:$PATH
3.3 方法3
编写环境配置文件env.sh
export QTDIR=/opt/armqt5.5-gec
export PATH=$QTDIR:/opt/usr/local/arm/4.5.1/bin:$PATH (据实际目录设置) //如QT安装在ubuntu, opt/Qt5.5.0/5.5/gcc/bin/qmake ,生成makefile,g++编译在ubuntu运行的程序
//export PATH=$QTDIR:/usr/local/arm/4.5.1/bin:$PATH
把env.sh文件放入工程目录下
source env.sh ----
4 交叉编译程序
4.1 创建一个qmake别名
alias armqmake='/opt/armqt5.5-gec/bin/qmake'
进入qt项目目录下
MyRun MyRun.pro mythread.cpp
Makefile myrun.cpp MyRun.pro.user mythread.h
moc_myrun.cpp myrun.h myrun.ui mythread.o
gec@ubuntu:/mnt/hgfs/C++-QT/Qt/004/code/MyRun$
4.2 使用Qt的qmake工具生成交叉编译的makefile文件--make编译/opt/armqt5.5-gec/bin/qmake
4.2.1 用指定的qmake生成Makefile文件
生成arm版本的Makefile ----》qmake
gec@ubuntu:/mnt/hgfs/C++-QT/Qt/004/code/MyRun$ armqmake //别名alias armqmake='/opt/armqt5.5-gec/bin/qmake'
4.2.2 生成arm版本的程序----》make
gec@ubuntu:/mnt/hgfs/C++-QT/Qt/004/code/MyRun$ make
4.2.3 把生成的可执行文件下载到开发板(根目录)运行
5 开发板Qt运行环境搭建
把交叉编译好的qt库下载到开发板
5.1 制作开发板文件系统,
5.1.1 常用目录
bin //命令 ,把 armlib.tar.bz2下面的/dbus/bin 目录下的文件拷贝进来
opt //放qt库存 ,从第二步的裁剪好的库放进去,可按需要后续添加, 在QT软件 帮助--索引可查询函数所依赖的库
ioT //驱动
tslib //触屏
usr
/usr/share/fonts/ //字库目录,可从ubuntu拷贝过来
/usr/share/fonts/truetype //把字体放到这个目录
etc //配置文件
/etc/profile
lib //库 ,把 armlib.tar.bz2下面的/dbus/lib 目录下的文件拷贝进来(拷贝时加选项把链接文件也一起拷贝 -radf )
5.1.2 打包目录成img文件, 把所有文件目录放到总目录 rootfs 下
# ./mkyaffs2image rootfs rootfs-v1.img
mkyaffs2image.rar
5.2 QT主要的库, (放在开发板/opt下) armqt5.5-gec.all.fonts.tar.bz2,准备交叉编译好的Qt库(把交叉编译好的Qt库下载到开发板/opt/下)
5.2.1 qt库存在开发板目录 /opt/armqt5.5-gec/lib
//配置文件: /etc/profile
//# cp unyaffs /bin/
//# unyaffs rootfs.img
5.2.2 裁剪qt库, 把armqt5.5-gec.all.fonts.tar.bz2 , 解压得目录 armqt5.5-gec
5.2.2.1 armqt5.5-gec 里可以删去的目录 rm bin/ doc/ include/ -r //
5.2.2.2 armqt5.5-gec/lib 里必要的三个文件, 例: cp libQt5Core.* ./ -radf //-radf和链接文件一起拷贝
libQt5Core. //核心
libQt5Gui. //按钮,图形
libQt5Widgets. //图形,界面
5.2.2.3 armqt5.5-gec/lib 里的其它文件
libQt5Network //网络
libQt5Sql. //数据库
libQt5DBus. //总线
libQt5PrintSuppon //打印机
5.2.2.4 把裁剪好的armqt5.5-gec拷贝开发板/opt下
5.3 QT依赖的库,(armlib-all.tar.bz2,字体,触摸屏(tslib库),总线), 解压得目录armlib
5.3.1拷贝armlib-all.tar.bz2到开发板/home/tiydy目录下(如果没有创建一个)
解压 tar -jxf armlib-all.tar.bz2 //解压得目录armlib
5.3.2字库拷贝到开发板
在开发板创建一个存入字库的目录mkdir /usr/share/fonts/truetype
在把字库droid拷贝到这个目录下
5.3.3 机器码machine-id
把/dbus/lib中的库拷贝到开发板/lib下(-radf包含链接文件)
# cp ./* /lib -radf
把/dbus/bin下的文件拷贝到开发板bin目录 ,(或在环境变量 /etc/profile设置路径)
# cp ./* /bin
在开发板运行(因dbus-uuidgen已拷贝到/bin , 所以在哪个目录下运行都可以)
# dbus-uuidgen > /etc/machine-id (重定向创建文件)
5.4设置开发板配置文件/etc/profile
方法1
把profile配置文件拷贝到开发板/etc/
把带QPE的删除或注释
方法2
#fonts //字库 , 开发板上,QT显示汉字
export FONTDIR =/home/tiydy/armlib
export LD_LIBRARY_PATH =$LD_LIBRARY_PATH:$FONTDIR/fontconfig/lib:$FONTDIR/freetype/lib
#QT5 config //QT5配置
export QTDIR =/opt/armqt5.5-gec //QT路径
export QT_QPA_PLATFORM_PLUGIN_PATH =$QTDIR/plugins//QT插件路径
export QT_QPA_PLATFORM =linuxfb //QT显示的一种方式
export QT_QPA_FONTDIR =$QTDIR/lib/fonts //QT字库路径
export LD_PRELOAD =/tslib/lib/libts.so:$QTDIR/plugins/platforms/libqlinuxfb.so//导入触摸屏库存,插件平台库存(linuxfb对应的插件)
export QT_QPA_GENERIC_PLUGINS =tslib //指定用tslib来实现
export LD_LIBRARY_PATH =/tslib/lib:$QTDIR/lib:$LD_LIBRARY_PATH//指定用tslib的库
五 Qt程序移植到开发板
1 在运行qt程序
# ./文件名
六 异常及解决
1 [root@GEC210 /]# ./a1025
1.1 错误提示
./a1025: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory //找不到libfontconfig.so.1
1.2查找有没有这个文件, 如果没有这安装相关库存,或从其它拷贝
[root@GEC210 /]# find / -name "libfontconfig*"
/opt/armlib/fontconfig/lib/libfontconfig.so.1.4.1
/opt/armlib/fontconfig/lib/libfontconfig.so
/opt/armlib/fontconfig/lib/libfontconfig.so.1
/opt/armlib/fontconfig/lib/libfontconfig.a
/opt/armlib/fontconfig/lib/libfontconfig.la
/opt/armlib/fontconfigs/lib/libfontconfig.so
/opt/armlib/fontconfigs/lib/libfontconfig.so.1
1.3把文件的路径添加到 /etc/profile
如, a) 另定义一个目录路径(FONTDIR_OPT)
export FONTDIR_OPT=/opt/armlib/fontconfigs
b) 添加到路径集里 (:$FONTDIR_OPT)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FONTDIR/fontconfig/lib:$FONTDIR/freetype/lib:$FONTDIR_OPT/lib
2 [root@GEC210 /]# ./a1025
./a1025: error while loading shared libraries: libQt5DBus.so.5: cannot open shared object file: No such file or directory //没找到文件
查找只有这个,原文件,可软链接成多个版本, 如 *.so , *.so.5 , *.so.5.5
libQt5Gui.so.5.5.0
软链接 : ln 原文件 生成的链接文件 -s
ln libQt5DBus.so.5.5.0 libQt5DBus.so.5 -s
3 在开发板运行程序出现下面错误 (没找机器码machine-id)
3.1 错误提示
from:tiydy-2015-10-16
process 146: D-Bus library appears to be incorrectly set up;
failed to read machine uuid: Failed to open "/etc/machine-id": No such file or directory
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
Aborted
3.2 解决
3.2.1 添加dbus库, (库在armlib.tar.bz2下面的/dbus/lib里面)
3.2.2 解压后,把/dbus/lib中的库拷贝到开发板/lib下(-radf包含链接文件)
# cp ./* /lib -radf
3.2.3把/dbus/bin下的文件拷贝到开发板bin目录 ,(或在环境变量 /etc/profile设置路径)
# cp ./* /bin
3.2.4在开发板运行(因dbus-uuidgen已拷贝到/bin , 所以在哪个目录下运行都可以)
# dbus-uuidgen > /etc/machine-id (重定向创建文件)
---------------------
作者:catemo
来源:CSDN
原文:https://blog.csdn.net/catemo/article/details/53131571
版权声明:本文为博主原创文章,转载请附上博文链接!
ubuntu 交叉编译qt 5.7 程序到 arm 开发板的更多相关文章
- Arm开发板+Qt学习之路
从2015.11.13日开始接触arm开发板,开始学习Qt,到现在已经四个月零17天了,从一个拿到开发板一无所知的小白,到现在能够在开发板上进行开发,有付出有收获. 之前一直没有时间将这个过程中的一些 ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- ARM开发板挂载Ubuntu18.04主机的NFS共享文件夹
环境 ubuntu主机环境:Window10 下装VMWare下装的 ubuntu18.04LTS x64 IP 192.168.10.119 Window10下配置192.168.10该网段 开发板 ...
- 使用arm开发板搭建无线mesh网络(二)
上篇博文介绍了无线mesh网络和adhoc网络的区别,这篇文章将介绍无线mesh网络的骨干网节点的组建过程.首先需要介绍下骨干网节点的设计方案:每个骨干网节点都是由一块友善之臂的tiny6410 ar ...
- ARM开发板挂载虚拟机 nfs目录
ARM开发板做相关开发,为了调试方便,常把开发板mnt目录挂载到虚拟机nfs共享目录上,这样调试程序时候就不用把程序转到开发板上再运行,方便很多.要挂载nfs共享目录,需要安装必要的组件支持. 1.虚 ...
- ARM开发板挂载U盘
ARM开发板运行Linux系统后,插入U盘,通过串口打印系统识别到U盘如下: 系统识别U盘盘符为sda4 那么需要挂载后才能操作U盘:挂载命令 mount -t vfat /dev/sda4 /mnt ...
- 使用arm开发板搭建无线mesh网络(一)
由于项目的需要,老板让我使用arm开发板(友善之臂的tiny6410)搭建无线mesh网络.一般而言,无线自组织网络的网络设备都是由用户的终端设备来充当,这些终端设备既要处理用户的应用数据,比如娱乐, ...
- 关于ARM开发板与PC主机的网络设置问题
直观来讲,ARM开发板多数情况下会有条网线与主机相连,所以最重要的一步是保证PC主机与ARM开发板能互通. 互通的意思进一步来讲就是互相能ping通.也就是说在瘟都死的dos下(假设主机是瘟都死系统) ...
- Windows10、ARM开发板、VMware虚拟机同时连接Internet
前段时间有人遇到一些网络连接问题,让我帮忙处理,他想让ARM开发板连接外网,可以连接网络数据库,同时保证自己的电脑可以上网. 本来说直接可以连接一个路由器,分配一个内网IP给ARM就可以了,但是当时那 ...
随机推荐
- IntelliJ IDEA 10 配置 Tomcat7
http://blog.csdn.net/neutrojan/article/details/8064145
- HDU 1874 畅通project续 (最短路径)
畅通project续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- js 获取手机浏览器类型,修改css文件的class的值
/*========================================= 函数功能:获取浏览器类型 =========================================*/ ...
- shell脚本创建和执行
shell脚本并不能作为正式的编程语言,因为它是在Linux的shell中运行的,所以称他为shell脚本. 事实上,shell脚本就是一些命令的集合. 我们不妨吧所有的操作都记录到一个文档中,然后去 ...
- 【转】C# ABP WebApi与Swagger UI的集成
以前在做WebAPI调用测试时,一直在使用Fiddler测试工具了,而且这个用起来比较繁琐,需要各种配置,并且不直观,还有一点是还得弄明白URL地址和要传递的参数,然后才能调用. 最近新入职,公司里 ...
- Redis运维时需要注意的参数
1: 内存 Memory used_memory:859192 数据结构的空间 used_memory_rss:7634944 实占空间 mem_fragmentation_ratio:8.89 前2 ...
- Ubuntu包管理工具整理
概述 常用的包管理包含三类工具:dpkg.apt和aptitude.1 dpkg 主要是对本地的软件包进行管理,本地软件包包括已经在本地安装的软件包和已经下载但还没有安装的 deb 文件,不解决依赖关 ...
- Javascript常用字符串判断函数
[代码] 字符串,函数,Javascript,脚本100 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
- Oracle学习笔记——常用函数总结
在平时写PL/SQL的时候,经常要用到很多系统自带的函数,而这些函数用起来非常好用,但是每次用完以后,就又忘到脑后了,为了加深自己的映象,以及对这些函数做一个全面的总结,就有了今天这篇文章. 首先这就 ...
- day20 匿名函数,内置函数,面向过程编程
目录 有名函数 匿名函数 max() min() sorted map filter 内置函数 面向过程编程 有名函数 def f1(): print('my name is f1') f1() my ...