• 3385阅读
  • 0回复

Qtopia开发及应用平台的搭建 [复制链接]

上一主题 下一主题
离线keisuo
 

只看楼主 倒序阅读 楼主  发表于: 2007-05-28
— 本帖被 XChinux 从 Qt Programming 移动到本区(2008-07-18) —
Qtopia开发及应用平台的搭建
       Qtopia开发平台主要指宿主机上带X Windows的Linux系统中的Qtopia开发环境,包括Qt designer,uic,tmake,qvfb,Qt/E库和qpe等。

       Qtopia应用平台则指基于ARM或其他嵌入式处理器的嵌入式Linux系统。



       因此,搭建不同的平台,虽然用到了相同的软件包,但在过程中使用的是不同编译器和编译参数,得到的是针对不同处理器的库文件和可执行文件以及工具。具体可以参考和对比《Build Qtopia for x86》和《Build Qtopia for arm》。因而要分别搭建两套Qtopia平台。

      

例如,如果在Build Qtopia for x86时,出现错误:

/usr/bin/ld: skipping incompatible /qte_x86/qtopia-1.7.0/lib /libqpe.so when searching for –lqpe

/usr/bin/ld: cannot find –lqpe

不细心的话只看到找不到libqpe.so,但是经检查发现/qte_x86/qtopia-1.7.0/lib有此文件,又认为不在链接路径内,加入链接路径,还是出现同样错误。其实仔细注意上面一行,已经提示说在搜索libqpe.so时跳过了/qte_x86/qtopia-1.7.0/lib下的不兼容的libqpe.so文件。因此根本问题在于不兼容,而不是不存在,或者说是不存在可用格式的libqpe.so文件。可用file命令检查文件信息:

# file ../lib/libqpe.so

ELF 32-bit LSB shared object, ARM, version 1(ARM), not stripped.

显然是在之前的操作中错误选择了不合适的编译器和编译参数,生成了不兼容的库文件所导致。

因此,在说库文件找不到或不可用时,除了要检查文件是否存在以及是否在可用的链接路径下时,还要注意检查兼容性,比如针对的处理器,ELF还是BSD,.so(共享库)还是.a(静态库)。



再比如,搭建好这两个平台后,可以用file指令查看所生成工具的属性。下面是查看Qtopia for arm的qpe的结果:

# file qpe

qpe: ELF 32-bit LSB executable, ARM, version 1(ARM), for GNU/Linux 2.0.0. dynamically linked(uses shared libs), not stripped.

若查看Qtopia for x86,则结果中相应部分为Intel 80386,version 1(SYSV).



下面引用了bucketxp在论坛中的发言。

一般编译qtopia,需要三样东西,在宿主机运行的uic指令,目标机的libqte库,还有qtopia源码。 不管你的目标机是arm还是x86,首先你要生成一个uic指令,这个uic指令是随Qt/Embedded源码附带,在tools里。而要生成这个uic指令,你首先要有一套在主机运行的libqte库。而生成这个libqte的时候不能加-qconfig qpe,这也就是你当初为什么加了-qconfig qpe出错的原因。 有了uic,第二步是编译一个在目标机上libqte库,这个时候如果你要用它来生成之后的qtopia,编译的时候必须加上-qconfig qpe,这就是你为什么加了-qconfig qpe会出错的原因。实际上完整编译一个qtopia的库应该有三个目录:

qte-2.3.10-host(就为了生成uic)

qte-2.3.10-target(生成为Qtopia所用的libqte)

qtoipa-free-2.1.1(生成Qtopia)

你出错的原因在于,虽然你host和target都是x86但是,任需要有两个版本的Qt/Embedded。 



sunshinezss,libqassistantclient.la是在make tools的时候生成的,应该在$QTDIR/lib目录中,你看看有没有。如果没有,说明你在make tools的时候有什么问题,或者没有走make tools这一步。qt-2.x有的版本会出现这个问题,在make中没有包含make tools这个阶段。

你可先make tools一下,再去make example,试试看。

如果按照lao_la的方法复制了qconfig-qpe.h,你在configure配置的时候加上-qconfig qpe就可以用这个配置文件来配置你的Qt/Embedded。

不过,这个配置文件是当你要用Qt/Embedded来生成Qtopia的时候才用的,他会禁止Qt/Embedded的许多功能和属性来使其具有更高的性能来运行Qtopia,所以你使用了这个配置文件后,你会发现许多的example都编译不过去,因为它们所需要的功能并没有包含在你用qconfig-qpe.h生成的Qt/Embedded的库里。

[http://www.linuxfans.org/nuke/modules.php?name=Forums&file=printview&t=124274&start=0]



平台搭建好之后,则进入Qtopia应用程序的开发的学习和研究阶段。具体内容可见〈Qtopia应用程序的开发〉。



另外,在搭建平台过程中,还有许多没有弄明白的问题。例如在搭建过程中各个软件包之间的依赖关系,那些步骤链接了哪些库,e2fsprogs到底是什么?-no-xft又是什么?tmake在哪些环节起了作用?如何看懂make过程中显示的信息?Makefile的进一步学习和研究,等等。希望在以后能有机会推出〈Qtopia平台搭建深入探讨〉一文。



[声明]本站文章除特别注明外,均为作者原创,如需转载请注明作者与出处。
[提示]您可以通过这个链接引用这篇文章:http://blog.chinaunix.net/u/23458/showart.php?id=164423
[ 此贴被XChinux在2008-07-18 16:38重新编辑 ]
快速回复
限100 字节
 
上一个 下一个