一、编译
1、到www.qt.io下载源码,qt-everywhere-opensource-src-5.5.0

2、设置编译器或者说平台。编译器是通过xplatform参数指定的,xplatform后面跟的参数实际上就时qtbase/mkspec下的文件夹的名字,这里以linux-arm-gnueabi-g++为模板,拷贝这个文件夹,重命名为arm-linux,然后修改这个文件夹里的qmake.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

这里修改的就是交叉编译器的名字,根据个人情况而定,我使用的是友善的编译器。

3、配置

./configure --prefix=/QT5. -no-c++ -no-qml-debug 
-xplatform arm-linux -qt-freetype -no-opengl -qt-pcre
-nomake tests -nomake examples -sysroot
/opt/FriendlyARM/toolschain/4.4./arm-none-linux-gnueabi/sys-root/ -v

这里的arm-linux就上上面拷贝的文件夹的名字。这里需要说明的是sysroot,指定了sysroot,编译器就会到sysroot目录去找头文件和库,否则就会去本机找,网上

的移植过程基本都没设置这个路径,在qt的官网上可以找到这个说明http://doc.qt.io/qt-5/embedded-linux.html,设置了sysroot之后,这个目录就是根目录

了,prefix是相对于这个目录来安装的,也就是说make install后,qt的库安装到了/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/QT5.5

录下。这个配置可能会提示跟xcb相关的东西,按照提示安装相关软件即可。配置之后,qt会提示你加上-qreal float选项,这个是为了跟以前的兼容,这里没有加,如

果加上也没问题,加上之后会碰到编译上的一些问题,这个在编译小节里说明。

4、编译。编译过程中,碰到了几个问题。

  • clock_gettime相关的错误。根据提示在源文件所在目录的Makefile里,找到LIBS加上-lrt
  • 因为加了-qreal float引起的编译问题,如果不加这个选项,就不存在这两个问题。都在qpdf.cpp中,一个是qBound(0., stops.at(i).first, 1.);其中qBound定义如下:

Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max)
{ return qMax(min, qMin(max, val)); }

qBound的3个参数是一样的,而stops.at(i).firstqreal类型的,0.1.double类型的,而qreal类型被指定为了float类型,所以就造成了这种编译问题,可以将stops.at(i).first强制转换为double类型。
另一个问题也在这里文件里,是<<符号的重载问题,代码如下:

QPdf::ByteStream s(&shader);
s << "<<\n"
"/ShadingType 2\n"
"/ColorSpace " << (alpha ? "/DeviceGray\n" : "/DeviceRGB\n") <<
"/AntiAlias true\n"
"/Coords [" << start.x() << start.y() << stop.x() << stop.y() << "]\n"
"/Extend [true true]\n"
"/Function " << function << "0 R\n"
">>\n"
"endobj\n";

这个地方没弄明白,ByteStream已经重载了qreal类型,提示是模糊的重载,有int或者char可以备选,将start.y()等强制转换为int后编译通过。

因为配置的时候加了-no-opengl选项,在编译qt3d的时候,需要用到opengl的模块,编译不过。因为用不到opengl,所以将qt3d屏蔽掉。找到源码目录下的qt.pro,屏蔽掉下面两句话:

addModule(qt3d, qtdeclarative qtimageformats)
addModule(qtcanvas3d, qtdeclarative)

用#号将这两句话注释掉就可以了。

5、安装。make install

二、在目标板上运行

  1. 先编译一个qt程序,在qtcreator的管理构建套件里设置好QT Versions编译器,这里QT Versions要设置成安装之后QT5.5的qmake路径,本文里是/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/QT5.5/bin/qmake这个路径,编译器就选/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++
  2. 将编译好的QT5.5拷贝到目标板上,这里放到/opt目录下。
  3. 指定QT的运行平台,这里使用linuxfb,QT有几种运行平台,在官网上有说明http://doc.qt.io/qt-5/embedded-linux.html,这里使用linuxfb,新建一个文件setqtenv.sh,写下如下内容:

export QTDIR=/opt/QT5.
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x600:mmSize=800x600:offset=0x0:tty=/dev/tty1

如果不指定QT_QPA_FONTDIRQT就会到/QT5.5的路径下去找字体,结果就找不到了。如果不指定QT_QPA_PLATFORM_PLUGIN_PATH,应用程序启动的时候就会提示找不到

linuxfblinuxfb是QT的一个插件,可以在/opt/QT5.5/plugins/platforms/文件夹下看到一个libqlinuxfb.soLD_LIBRARY_PATH是指定库的路径,这个就不说了,最

熟悉的东西了。QT_QPA_PLATFORM是指定平台,fb指定framebuffer的设备地址,具体的参数在官网上有说明参见上面给出的链接。然后运行source setqtenv.sh添加这

些环境变量,至此,界面就可以显示出来了。

三、支持触摸屏

  1. 首先应用程序要链接ts库,在qtcreator的工程文件里加上LIBS += -lts
  2. 设置触摸屏相关的环境变量,如下:

export QT_QPA_GENERIC_PLUGINS=tslib
export TSLIB_TSDEVICE=/dev/touchscreen-1wire
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts

这个QT_QPA_GENERIC_PLUGINS参数在官网上没找到说明,百度到的,在/opt/QT5.5/plugins/generic目录下可以看到一个libqtslibplugin.so,剩下的就是tslib的配置了,这里使用的是友善触摸屏,tslib已经移植好了,如果没有tslib的话,还需要移植tslib。至此,触摸屏就可以使用了,直接执行./ArmTest就可以了,不需要加其他参数,这里ArmTest是我的测试程序。

http://www.cnblogs.com/tracing/p/4982296.html

QT5.5移植全攻略【转】的更多相关文章

  1. Windows Socket五种I/O模型——代码全攻略(转)

    Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操 ...

  2. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  3. 生成 PDF 全攻略【2】在已有PDF上添加内容

    项目在变,需求在变,不变的永远是敲击键盘的程序员..... PDF 生成后,有时候需要在PDF上面添加一些其他的内容,比如文字,图片.... 经历几次失败的尝试,终于获取到了正确的代码书写方式. 在此 ...

  4. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  5. Android屏幕适配全攻略 (转载)

    http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...

  6. Moon.Orm3.8技术全攻略

    Moon.ORM技术全攻略  一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...

  7. TestLink安装全攻略

    TestLink安装全攻略 此文章转自该链接--http://www.cnblogs.com/Tcorner/archive/2011/07/26/2117296.html 安装前准备 需要下载xam ...

  8. 取代奶瓶Minidwep-gtk破解WPA 全攻略

    取代奶瓶Minidwep-gtk 破 WPA 全攻略  目录 1. CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2. 自带的字典破解不出密码时使用 U 盘外挂字典继 ...

  9. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

随机推荐

  1. springboot-quartz 实现动态添加,修改,删除,暂停,恢复等功能

    任务相关信息:springboot-quartz普通任务与可传参任务 一.任务实体类 package cloud.app.prod.home.quartz; import java.io.Serial ...

  2. oc43--野指针和空指针

    // // main.m // 野指针和空指针 #import <Foundation/Foundation.h> #import "Person.h" int mai ...

  3. hdu 2177(威佐夫博奕+打表)

    取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. 蓝桥杯--2011--购物券(dfs)

     公司发了某商店的购物券1000元,限定只能购买店中的m种商品.每种商品的价格分别为m1,m2,-,要求程序列出所有的正好能消费完该购物券的不同购物方法. 程序输入: 第一行是一个整数m,代表可购 ...

  5. 单向链表的归并排序——java实现

    在做Coursera上的Algorithms第三周测验练习的时候有一道链表随机排序问题,刚开始没有什么思路,就想着先把单向链表归并排序实现了,再此基础上进行随机排序的改造.于是就结合归并排序算法,实现 ...

  6. Alignment(dp)

    http://poj.org/problem?id=1836 求两遍最长上升子序列,顺序求一遍,逆序求一遍. #include <stdio.h> #include <string. ...

  7. informix 通过ADO或ODBC连接提取数据时出现中文乱码的解决方法

    最近在做一个项目,是对INFORMIX数据库的数据进行大数据分析,INFORMIX数据库数据有上亿条,没有linux的Root权限和informix数据的生产权限,只能读取.客户要求结果显示在内网wi ...

  8. poj1101 the game 广搜

    题目大意: 类似于连连看,问从起点到终点最少需要几条线段. 规则: 1.允许出界. 2.空格的地方才能走. 分析: 题目做下来发现没有卡时间,所以主要还是靠思路.也就是说不用考虑离线算法.直接以每个起 ...

  9. 使用pelican创建静态博客

    创建工作目录 首先使用pip安装pelican和markdown pip install pelican markdown 然后创建目录 mkdir my_blog 接着进入目录cd my_blog, ...

  10. Type inference

    Type inference refers to the automatic detection of the data type of an expression in a programming ...