![](/Editor/FCKeditor/editor/images/smiley/msn/regular_smile.gif)
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
的库里。
平台搭建好之后,则进入Qtopia应用程序的开发的学习和研究阶段。具体内容可见〈Qtopia应用程序的开发〉。
另外,在搭建平台过程中,还有许多没有弄明白的问题。例如在搭建过程中各个软件包之间的依赖关系,那些步骤链接了哪些库,e2fsprogs到底是什么?-no-xft又是什么?tmake在哪些环节起了作用?如何看懂make过程中显示的信息?Makefile的进一步学习和研究,等等。希望在以后能有机会推出〈Qtopia平台搭建深入探讨〉一文