Arm-Linux嵌入式QT/E环境的建立(qt/e 3.x系列)





         QT/E 3.x系列比QT/E 2.x系列有非常大的改进,大大提高了开发进度,不再使用tmake,安装也更简单。但目前在网上关于QT/E 3.x系列的介绍还是比较少,所以本文介绍一下QT/E 3.x系列的安装。





二、编译QT





   1、QT/E自由版可到官网ftp下载。网址是:ftp://ftp.trolltech.com/qt/source/ 。可自己选择一个版本下载,个人认为QT/E 3.x系列比较好用,不过QT/E 2.x系列在网上的资料比较多。但建议不用qt/e 3.3.x 的版本,因为在本人开发的过程当中试用过qt/e 3.3.4和qt/e3.3.8,发现它们在ARM开发板上占CPU的资源特高,一直占cpu 98%左右,现在我还没找到原因,不知道有没有哪位朋友也遇到这个问题。推荐用qt/e 3.1.0版本,我正在用,没遇到什么问题。





(注:问题已经得到解决,原来是键盘接口没做好,等有空与大家分享一下移植键盘接口的过程)





         2、在这里,本人假设用的是 qt-embedded-free-3.3.8b.tar.gz





         3、把文件qt-embedded-free-3.3.8.tar.gz 拷贝到一个文件夹,这里我用:/usr/local/arm这个目录。注意后面建立环境变量时要与之对应。





         4、解压 tar   zxvf   qt-embedded-free-3.1.0.tar.bz2  





             把解压后的文件夹qt-embedded-free-3.3.8b改为qte。(可以不改,这里是为了方便,注意后面建立环境变量时要与之对应)    





                        mv     qt-embedded-free-3.3.8b     qte





         5、建立环境变量





                       vi     ~/.bashrc





               在后面加上





                       export QTDIR=/usr/local/arm/qte

                       export QTEDIR=$QTDIR

                       export PATH=$QTDIR/bin:$PATH

                       export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH





              (请重新登陆,以使得环境变量生效)

                 



















==============================================================

注意:将/usr/local/qt/bin下的“uic,moc“拷贝到/urc/local/arm/qte/bin文件夹下。

==============================================================





6、修改文件





1)打开src/tools/qglobal.h查看318-326行:

# if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)

# define Q_PACKED __attribute__ ((packed))

# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4

# define Q_NO_PACKED_REFERENCE

# endif

# endif

# if !defined(__EXCEPTIONS)

# define Q_NO_EXCEPTIONS

# endif





修改为:

# if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)

# define Q_PACKED __attribute__ ((packed))

# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4

# define Q_NO_PACKED_REFERENCE

# endif

# if __GNUC__ == 4 && __GNUC_MINOR__ >= 0            

# define Q_NO_PACKED_POINTERS

# endif

# endif

# if !defined(__EXCEPTIONS)

# define Q_NO_EXCEPTIONS

# endif





2)打开include/qstring.h查看195-199行

ushort unicode() const { return ucs; }

#ifdef Q_NO_PACKED_REFERENCE

ushort &unicode() { return *(&ucs); }

#else

ushort &unicode() { return ucs; }

#endif





修改为:

ushort unicode() const { return ucs; }

#ifdef Q_NO_PACKED_REFERENCE

ushort &unicode() { return *(&ucs); }

#elif defined Q_NO_PACKED_POINTERS

ushort &unicode() { ushort& tmp = ucs; return tmp; }

#else

ushort &unicode() { return ucs; }

#endif









          7、配置QT





            进入QT/E目录:     cd    $QTDIR





              输入:   ./configure  -embedded  arm   -thread  -no-cups -qvfb -depths 4,8,16,32









            上述选项: -embedded  arm 指目标平台为arm; -thread 表示支持qt线程,本人开发当中用到; -qvfb 表示支持虚拟缓冲帧工具qvfb;-depths 4,8,16,32 表示支持4,8,16,32 位的显示颜色深度。还有很多选项就不一一列举,请查看 ./configure  -help。





         此外还有一个选项我没用的是 -qconfig  local,你可以把一些开关变量写到一个文件qconfig-local.h 中,并把它放到$QTDIR/src/tools下。可参考这个目录下的qconfig-small.h、qconfig-medium.h 、qconfig-large.h等文件,直接使用它们也行,如:  -qconfig  small 。通过这些开关变量,可以把一些开发当中用不着的构件去掉,减少qt库的大小。这里要对QT比较熟练,初学者可先不理。









            (本人在家里编译到这里曾出现编译 $QTDIR/include/qvaluestack.h 这个文件的时候出错,后来把qt3.3.8对应的文件拷贝过来覆盖便通过了,估计是与gcc的版本不兼容的问题,我在公司里没出现过这种问题)





         8、编译





            make sub-src      // 指定按精简方式编译开发包,也就是说有些Qt 类未被编

译。





          9、测试





                  至此编译工作完成,最后测试一下是否能正常使用。我们可以用QT自带的例子来测试,如:





                  cd  $QTDIR/examples/aclock      //或你自己新建一个QT工程也行





                  make clean                              //把原来的清掉





                   rm    *.pro      Makefile                       //删掉,重新建立工程文件





                   qmake   -project





                    qmake   -spec  $QTDIR/mkspecs/qws/linux-arm-g++   -o  Makefile           





                -spec指定目标板的配置文件,这里我做的是linux arm平台,注意在这里,$QTDIR/mkspecs/qws/linux-arm-g++ 它不是编译器,是一个配置文件,而编译时用的编译器是我们在第一步建立的arm交叉编译工具链里面的编译器。 





                   make                      





             如果没出错就表示你的QT/E环境已经成功建立。如果提示说cannot   find   -lqte,那么你试一下修改Makefile文件,找到-lqte ,把它改为-lqte-mt再make一次一般就行了。这是因为如果用到QT线程或其它一些原因,它生成的库不再是libqte.so.3.1.0,而是 libqte-mt.so.3.1.0,所以它便找不到了。





三、移植到开发板(以下都是在目标机环境下)





        1、新建一个目录,如:/qt/lib。进入此目录 cd   /qt/lib





        2、通过 ftp  把上面生成的qt库文件libqte-mt.so.3.1.0下载到开发板/qt/lib/目录下。(注意:不要用wget 下载,会破坏库文件,从而出现  ld.so: dynamic-link.h: 62: elf_get_dynamic_info: Assertion `! "bad dynamic tag"''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
failed!.这种错误)





        3、创建qt库连接:





                ln   -s   libqte-mt.so.3.3.8     libqte-mt.so





                ln   -s   libqte-mt.so.3.3.8     libqte-mt.so.3





                ln   -s   libqte-mt.so.3.3.8     libqte-mt.so.3.1





        4、建立环境变量





                       vi     ~/.bashrc





               在后面加上





                       export QTDIR=/qt

                       export QTEDIR=$QTDIR

                       export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

          (当移植到开发板上的时候可以直接将上面三段加到 /etc/init.d/rcS下,即直接作为运行脚本处理,也要注意上边三个qt库的位置,要和输出指向相同)





           5、到此目标板的环境已经建好。现在可以把上面的例子aclock下载到目标板上试一下能不能跑起来!





             在开发板控制台下输入:  ./aclock  -qws 





              如果能跑起来但是键盘用不了,那是正常的情况,因为键盘、鼠标等设备的接口还没加进QT/E的原因,而这个不是一两句话能说清的,所以留到以后再另外补充!





补充一点:如果有类似这样的提示:  "./aclock: error while loading shared libraries: libstdc++.so.6: cannot load shared object file: No such file or directory." 你可以从我们第一步建立的arm交叉编译工具链里的/usr/local/arm/2.95.3/arm-linux/lib/目录下找到相应的库文件下载到开发板的 /lib 目录下即可。

【学QT】2 - QT/E环境的建立的更多相关文章

  1. QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程

    1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...

  2. Qt基础之开发环境部署

    将 Qt 5.6 集成至 VS2015 摘要: 由于VS2015不再支持addin,所以要用其他手段. 这里给出64位系统下的安装步骤,32位类似. 一.安装VS2015 过程略.值得注意的是要选择需 ...

  3. 如何配置一个绿色化的 Qt for Windows 开发环境(有.bat脚本,亲测好用) good

    安装 QtCreator for Windows 其实是很简单的,不过,我一向讨厌什么软件都得弄个安装程序,我希望我所安装的这个 Qt 可以是绿色的.便携的,如果无法实现,至少让这个 Qt 可以在新系 ...

  4. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  5. Qt的IDE开发环境(KDevelop,MonKey Studio,QDevlop,Dev-cpp,Cobras,Edyuk)

    讲到Qt的IDE开发环境,本人一直在Windows下使用VC6.0 + Qt4.3.1开发程序.但转到Linux下,使用Fedora中自带的KDevelop + Qt4.3.1开发程序. 最近一直做Q ...

  6. 【Qt】Qt环境搭建(Visual Studio)【转】

    简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了,因为我两个都用,而且两个都很喜欢(比较多情吧O(∩_∩)O~)! 下面将进行Qt Creator与 ...

  7. Qt For Android 开发环境配置

    想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt ...

  8. QT的安装及环境配置

    QT的安装及环境配置 一.windows的下QT的安装及环境配置 (一)从框架安装程序中安装 步骤: 准备:下载QT库,下载指定版本的MINGW,QT IDE 1.下载QT安装文件如:qt-win-o ...

  9. QT树莓派交叉编译开发环境搭建

    QT树莓派交叉编译开发环境搭建 - JerryZone <Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2> <Qt for Em ...

随机推荐

  1. SpringBoot入门之HelloWorld

    1.SpringBoot简介 百度百科:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而 ...

  2. Java 编译与反编译

    编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Lang ...

  3. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...

  4. 第10篇 WINDOWS2003服务器 IIS上配置404页面的图文教程

    打开IIS 找到你的网站,点右键,选择属性 选择“自定义错误”标签页,找到404的那一项,点“编辑属性”按钮 (方案一)在“消息类型”里选“URL”,然后在下面的“URL”输入框里,填上你的404错误 ...

  5. Windows键盘驱动结构与消息机制--转

    https://www.douban.com/note/318793892/ 本文主要介绍按键消息是如何传递到窗口并转化为具体的按键消息的. Windows系统是事件驱动的多任务系统,其中按键和鼠标是 ...

  6. Linq学习(一)-初涉Linq

    一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封 ...

  7. Java学习笔记_网络+多线程

    支持同时收发的客户端和服务器端 客户端 import javax.swing.*; import java.awt.*; import java.io.*; import java.net.*; im ...

  8. C++ Primer(第4版)-学习笔记-第2部分:容器和算法

    第9章 顺序容器 顺序容器和关联容器 顺序容器内的元素按其位置存储和访问. 关联容器,其元素按键(key)排序. 顺序容器(sequential container). 顺序容器的元素排列次序与元素值 ...

  9. fieldset ----- 不常用的HTML标签

    fieldset 元素可将表单内的相关元素分组. <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段. 当一组表单元素放到 <fieldset> 标签内时 ...

  10. java 中String与StringBuilder 效率

    之前印象中string与stringbuilder操作时,如果多次改变string就使用stringbuilder,效率会提高: 今天实际遇到了问题,亲身经历过之后,这性能不是一般的影响啊:不是同一个 ...