1.环境说明
QT 移植
- 系统: ubuntu 14.04 x64
- 编译器: arm-none-linux-gnueabi-gcc 4.8.3
- QT 5.5.1
2.下载源码
- 下载交叉编译器,网址为: http://www.veryarm.com/arm-none-linux-gnueabi-gcc ,下载最新的
版本 4.8.2
- 下载 QT 源码,在 QT 官网上下载: https://download.qt.io/archive/qt/ 。
3.移植 QT
3.1 配置交叉编译器
将下载的交叉编译器解压到任意文件夹( root 用户请放在出 /home 文件夹意外的位置),然后重命
名为 arm-gcc ,我解压后的完整路径是 /opt/EmbedRigol/arm-gcc 。
添加交叉编译器的环境变量: export PATH=$PATH:/opt/EmbedRigol/arm-gcc/bin 。
查看交叉编译器的配置是否成功,输入
arm-none-linux-gnueabi-gcc -v

如下图说明交叉编译器的版本是 4.8.3 ,配置成功。

3.2 修改编译 qt
( 1 )解压下载的源码
解压 qt 源文件到 /opt/EmbedRigol/ 下,解压后完整路径是 /opt/EmbedRigol/qt-everywhere-
opensource-src-5.5.1 。
注意,此处的解压要使用命令行形式(即终端的 tar 命令),不要直接右键提取到此处,否则会出现
意想不到的错误。
( 2 )修改 qmake 文件指定交叉编译器
在 qt 根目下进入 qtbase/mkspecs/linux-arm-gnueabi-g++/ 目录,并打开 qmake.conf 文件,如下:
cd qtbase/mkspecs/linux-arm-gnueabi-g++/
gedit qmake.conf
修改文件如下:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR
= UNIX
CONFIG
+= incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-aQMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC
= arm-none-linux-gnueabi-gcc
QMAKE_CXX
= arm-none-linux-gnueabi-g++
QMAKE_LINK
= arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB
= arm-none-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR
= arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY
= arm-none-linux-gnueabi-objcopy
QMAKE_NM
= arm-none-linux-gnueabi-nm -P
QMAKE_STRIP
= arm-none-linux-gnueabi-strip
load(qt_config)
这里的 arm-none-linux-gnueabi-gcc 就是刚才指定的交叉编译器,如果交叉编译器没有用环境变量
导入,则需要使用绝对路径,如这里可以直接写作:
/opt/EmbedRigol/arm-gcc/bin/arm-none-linux-gnueabi-gcc
( 3 )去掉 3d 编译
qt3d 和 qtcanvas3d 在编译的时候会报错,说是未识别模块,而且嵌入式没有 opengl ,即便识别也
会报错导致编译失败。在编译配置参数里面也没有这两个模块的配置。因此这里去掉关于 3d 方面的编译
选项。
打开 qt 根目录下的 qt.pro 文件,注释掉下面两句:
#addModule(qt3d, qtdeclarative qtimageformats)
#addModule(qtcanvas3d, qtdeclarative)
( 4 )配置编译参数
创建 run_config 文件,并增加可执行权限( chmod a+x run_config ),内容填充如下:
./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix
/opt/EmbedRigol/install-dev/qt-5.5.1 -confirm-license -no-iconv -no-c++11 -no-opengl
说明:
-xplatform 后面指定平台,也就是刚才指定的交叉编译器 qmake 配置文件的文件夹名 linux-arm-
gnueabi-g++
-prefix 后面跟 qt 编译后执行 make install 的安装路径
-confirm-license 相当于同意一个协议
-no-opengl 为了不编译 3d 参数,这里增加 ” -no-opengl ” 参数,其他参数如下
配置完成后执行
./run_config

随后,执行

make -j8等编译结束后执行
make install
此时, qt 被安装在 -prefix 指定的路径中即 /opt/EmbedRigol/install-dev/qt-5.5.1 ,可以进入路径可以查
看如下

备注:编译过程当中错误

( 1 ) 编译器找不到错误

解决方案:配置编译器的环境变量, sudo gedit /etc/bash.bashrc 在文件当中加入

export
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home
/hml/software/arm-gcc-4.8/arm-2014.05/bin"
上面的错误有时配置完成环境变量也会出现,原因是环境变量未生效
在终端输入检测环境变量是否生效,在 root 用户和非 root 用户都做检查: echo $PATH 检查环境变量是
否配置正确,输入 : arm-none-linux-gnueabi-g++ -v
环境变量配置网站: http://blog.chinaunix.net/uid-24612247-id-88176.html

( 2 )重复编译过程中出现了这个错误

解决方案:重新解压文件,重新设置配置选项,重新 make make install 即可。

总之出现 Could not determine the target architecture! 等错误,一 检查
qtbase/mkspecs/linux-arm-gnueabi-g++/ 目录下的 qmake.conf 配置,二 检查编译器的环境变量配置
3.3 移植到开发板
( 1 )打包拷贝
为了保证源文件的原有属性,这里采用先压缩后解压到开发板的模式。执行下面压缩语句将安装好
的 qt 包压缩。
tar -cjvf qt-5.5.1.tar.bz2 qt-5.5.1
压缩后如下所示
( 2 )将压缩后的文件解压到开发板的文件系统中
我这里解压到文件系统的 usr/local/ 文件夹下,完整的路径是 usr/local/qt-5.5.1 。
( 3 )设置开发板的环境变量
打开开发板文件系统中 etc 文件夹下的 profile 文件,编辑如下
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/qt-5.5.1/bin
export PATH
#set hostname
HOSTNAME='/bin/hostname'
export HOSTNAME
# Set PS1
PS1='[\u@\h \W]\$'
export PS1
# qt path
export QTDIR=/usr/local/qt-5.5.1
export LD_LIBRARY_PATH=/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1
export QML2_IMPORT_PATH=$QTDIR/qml
启动开发板时会自动根据此文件设置开发板的环境变量。
4. 移植一个 qt 程序到开发板
前面的移植相当于对开发板配置了 qt 的运行环境,当有 qt 程序时,可以直接运行与此环境之上。
4.1 先跑一个 qt 自带的例子程序
在 qt 的源码安装路径中有一个 examples 文件夹,其中存放了部分 qt 的测试程序。例如

examples/touch/pinzoom/pinchzoom 程序的执行结果应该如下图所示。

( 1 ) 进入文件执行 ./pinchzoom ,提示错误信息(该错误有可能不会出现)
/bin/sh .fluidlauncher : not found
解决方案:
[1] 直接将编译 qt 的编译器 arm-none-linux-gnueabi- 对应目录下 /home/hml/software/arm-
gcc-4.8/arm-2014.05/arm-none-linux-gnueabi/libc 所有 .so 文件拷贝到开发板 lib 目录。
[2] 采用 arm-none-linux-gnueabi-readelf -d fluidlauncher

只在 /home/hml/software/arm-gcc-4.8/arm-2014.05/arm-none-linux-gnueabi/libc 下复制途中对应

的 .so 文件到开发板目录即可
( 2 )进入文件夹,执行 ./pinchzoom ,提示错误信息:./pinchzoom: error while loading shared libraries: libQt5Widgets.so: cannot open shared object file:
No such file or directory
解决方案:
将 qt-5.5.1/lib 文件夹下的 libQt5Widgets.so 相关文件拷贝到开发板的 lib 文件夹下
( 3 )重新执行 ./pinchzoom ,提示错误信息:
./pinchzoom: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No
such file or directory
解决方案 1 :
将交叉编译器( /opt/EmbedRigol/arm-gcc/arm-none-linux-gnueabi-gcc/libc/usr/lib )中的
libstdc++.so.6 相关文件拷贝到开发板的 lib 文件夹下。
( 4 )解决后重新执行 ./pinchzoom ,提示错误信息:
Cannot find libdbus-1 in your system to resolve symbol 'dbus_get_local_machine_id'.
Aborted
原因是没有 libdbus-1.so 库,所以需要移植。
移植 dbus
-----------------------------------------------------------------------------------------------------------------------
libdbus.so 源码的下载网址为 http://dbus.freedesktop.org/releases/dbus/ ,我这里下载 1.2.30 版本,
并解压在 /opt/EmbedRigol/ 文件夹下,完整路径是 /opt/EmbedRigol/dbus-1.2.30 。进入源码目录,执行
下面的语句进行编译配置:
./configure --host=arm-linux –prefix=/opt/EmbedRigol/install-dev/dbus-1.2.30 CC=arm-none-
linux-gnueabi-gcc --without-x
提示错误
configure: error: Could not find expat.h, check config.log for failed attempts
原因是需要现安装 expat 。。。
下载 expat ,网址是 http://sourceforge.net/projects/expat/files/expat/ ,解压在 /opt/EmbedRigol/
文件夹下,完整路径是 /opt/EmbedRigol/expat-2.1.0 。进入该路径后执行如下命令:
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/EmbedRigol/install-
dev/expat-2.1.0
其中安装路径是 /opt/EmbedRigol/install-dev/expat-2.1.0 ,接下来执行 make 和 make install 。安装后
文件如下图所示:

然后回来再编译 dbus ,切换目录至 /opt/EmbedRigol/dbus-1.2.30 ,执行命令:

CC=arm-none-linux-gnueabi-gcc ./configure CFLAGS=-I/opt/EmbedRigol/install-dev/expat-
2.1.0/include LDFLAGS=-L/opt/EmbedRigol/install-dev/expat-2.1.0/lib
--prefix=/opt/EmbedRigol/install-dev/dbus-1.2.30 --host=arm-linux --enable-abstract-sockets
其中, CC 指定编译器, CFLAGS 指定额外的 .h (这里是 expat.h )的路径, LDFLAGS 指定 expat 的
库位置, prefix 指定 dbus 的安装路径, host 指定移植后的运行环境, enable-abstract-sockets 是过滤
交叉编译器检查的。
执行完 .configure 后完成编译配置,随后执行 make 和 make install 进行编译和安装。安装后文件如

下所示:

-----------------------------------------------------------------------------------------------------------------------

移植完 dbus 库后,将 /opt/EmbedRigol/install-dev/dbus-1.2.30/lib 文件夹下 libdbus-1.so 相关的
文件拷贝到开发板的 lib 文件夹下。
( 4 )重新执行 ./pinchzoom ,提示错误信息:
process 85: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to
open “/opt/EmbedRigol/install-dev/dbus-1.2.30/var/lib/dbus/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 abacktrace
Aborted
解决方案:在 qt/qtbase/mkspecs/linux-arm-gnueabi-g++/ 目录下的 qmake.conf 文件中添加如下几
句,用以指定 dbus-1 的安装路径和库路径。
QMAKE_INCDIR
QMAKE_INCDIR
QMAKE_LIBDIR
+= /opt/EmbedRigol/install-dev/dbus-1.2.30/include/dbus-1.0
+= /opt/EmbedRigol/install-dev/dbus-1.2.30/lib/dbus-1.0/include
+= /opt/EmbedRigol/install-dev/dbus-1.2.30/lib
然后配置 qt 的编译参数,输入如下:
./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix
/opt/EmbedRigol/install-dev/qt-5.5.1 -confirm-license -no-iconv -no-opengl -no-c++11 -dbus
即,增加 -dbus 参数,然后重新编译安装( make 和 make install )。
重复 3.3 节操作,移植到开发板上。
解决上述提示的的 machine-id 问题:在 pc 上执行下面语句:
dbus-uuidgen > /opt/EmbedRigol/install-dev/dbus-1.2.30/var/lib/dbus/machine-id
如果没有相应目录请按照错误提示将路径建立完整,然后将生成的 machine-id 文件以及完整路径复制到
开发板文件系统中即可。
( 5 )重新执行 ./pinchzoom4.2 将开发好的 QT 程序移植到开发板
利用 QT Creator 软件开发 qt 程序,把编译好的可执行文件和所需要的字体库、链接库等文件拷贝

到开发板的的 QT 相应目录下,执行该程序即可。

天嵌开发版 imx6 移植qt相关推荐

  1. f429 discovery开发版 LVGL移植(带操作系统)

    文章标题 准备 STM32F429I-DISC1 开发版 CUBEMX 工具 移植 CUBEMX生成基础代码 FREERTOS 时钟树 生成 LVGL库移植 LVGL 驱动 触摸屏 显示 触摸 导入k ...

  2. 迅为IMX6ULL教程更新至2060+页,裸机开发,Linux系统移植,驱动开发,构建文明系统,QT开发,系统编程

    教程更新至2060+页 彻底让零基础的同学真正学会 更完善的教程更全面的讲解更高效的学习 第一部分 总领及学习指引:主要探讨的学习方法,我们将尽量用比较简洁的方式,让大家明白嵌入式系统知识体系,以及它 ...

  3. iMX6系列-iMX6Q 开发板 Python 移植

    本文基于飞凌OKMX6Q/DL开发板为基础讲解,主要使用平台是imx6系列,linux3.0.35操作系统,其他平台也可以参考,不同平台之间会存在差异,需自行修改适应自己的使用 iMX6 Python ...

  4. Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440

    Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440 参考: http://hi.baidu.com/jiyeqian/blog/item/f46d2 ...

  5. Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440

    Fedora9 下搭建Qt Creator的ARM开发环境并移植Qt4.6.3-books到mini2440 分类: LINUX 2011-10-18 16:44:56 因为在搭建ARM的qte环境时 ...

  6. 语音识别开源库 FastARS 移植到GEC6818开发版

    FastARS 移植 移植 安装fftw3 1.下载源码 wget -c http://www.fftw.org/fftw-3.3.10.tar.gz ​ 2.解压 tar -xzvf fftw-3. ...

  7. x210开发板linux驱动开发,移植Qt与Tslib到X210开发板的体会

    1.将QT移植到X210上,让X210开发板可以运行QT东西,需要几个东西.tslib QT源码编译后的lib库等 (1)tslib移植: @1:下载tslib,官方上下就可以. @2:解压.比如解压 ...

  8. 天嵌TQ2440 ARM开发板Uboot移植

    TQ2440 ARM开发板Uboot移植 移植环境 主    机:VMWare--Fedora 10 Kernel:2.6.34  开发板:TQ2440--256MB Nand 编译器:arm-lin ...

  9. Qt + 觸控 移植 – Qt and Touch Screen Porting to SBC6446 with LEOs for DaVinci

    完成了 Qt 接下來就是要讓觸控面板的功能也起來 因為之前有兩篇教學了 所以這篇照片可能會跳的比較快 不懂的話可以回去看看前兩篇的設定 [達文西] 建置開發環境 – Based on EDK6446 ...

最新文章

  1. [转帖]一位“鬼佬”总经理的管理艺术
  2. java cookie的有效期_Java Web cookie的有效期
  3. python函数不定参数_python如何定义不定参数函数
  4. 2019年ICPC银川区域赛 Easy Problem(简单莫比乌斯函数 + 欧拉降幂)
  5. Swift标识符和关键字
  6. 正则控制可以输两位小数、负数,整数
  7. 【OpenCV 例程200篇】80. 频率域图像滤波详细步骤
  8. python--lambda
  9. 分布式事务中间件Seata简介
  10. 野生前端的数据结构基础练习(8)——图
  11. Mycat安全_SQL拦截白名单---MyCat分布式数据库集群架构工作笔记0033
  12. checkbox全选
  13. Linux查看线程的方法小结
  14. python求解在给定递减数组中寻找两个数和等于定值,乘积最小
  15. HTML在线visio进行简单布局,visio2007教程
  16. Swagger2+Apizza接口文档
  17. 8086 CPU 寄存器
  18. C#姓名与机构名称生成专用类
  19. Linux命令之查看登录用户列表users
  20. Android Studio系统盘瘦身

热门文章

  1. 入行大数据,需要学习哪些编程语言?
  2. c语言中指针用法初级,C语言中各类指针的用法(小结)
  3. 《商业模式》读书笔记
  4. MySQL(九):InnoDB 表空间(Tables)
  5. 学习笔记——spring5概念和原理
  6. 科技创业企业密集关注网络电话等通信产业
  7. 想转行做大数据开发,求各路大神给指条明路?
  8. 26进制(A到Z表示1到26,例27:AA,2019:BYQ)
  9. think-swoole简易使用教程--websocket
  10. 基于公共知识和一次学习的多任务流量分类