主题 : 在Red Hat 9上编译Qtopia 2.2.0遇到的若干问题的解决方案 复制链接 | 浏览器收藏 | 打印
奔跑的蜗牛……
级别: 侠客
UID: 11357
精华: 4
发帖: 69
金钱: 565 两
威望: 125 点
贡献值: 4 点
综合积分: 218 分
注册时间: 2009-12-04
最后登录: 2013-04-05
楼主  发表于: 2009-12-28 16:56

 在Red Hat 9上编译Qtopia 2.2.0遇到的若干问题的解决方案

管理提醒: 本帖被 kasim 设置为精华(2009-12-28)
描述:安装这些软件包来开发QT和KDE图形化应用程序
图片:
若干天前试图按照Mini2440使用说明书附录一的说明编译x86-Qtopia 2.2.0,编译过程出现若干个错误。
以下是这些错误的解决方案:
问题一:
没有安装QT开发所需要的软件包。
今天在/opt/FriendlyARM/mini2440/x86-qtopia/目录下使用终端#./build 2>&1|tee x86-Qtopia.log命令重新编译Qtopia 2.2.0,并将日志保存在当前目录下的x86-Qtopia.log文件中。通过查找该文件中编译过程的生成的error标记,得知编译未能通过时因为缺少X11/Xlib.h文件和X11/Xatom.h文件。通过紧接着之前的编译命令
g++  -c -I/usr/X11R6/include -I/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/include -I/usr/X11R6/include -pipe -O2 -Wall -W -DNO_DEBUG -fPIC -DQT_BUILTIN_GIF_READER=0 -DQT_NO_IMAGEIO_JPEG -DQT_NO_IMAGEIO_MNG -DQT_NO_SM_SUPPORT -DQT_NO_XKB  -I/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/src/3rdparty/zlib -I/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/src/3rdparty/libpng  -I3rdparty/kernel -I3rdparty/tools -o tmp/release-shared-linux-g++/tools/qutfcodec.o tools/qutfcodec.cpp
查看包含根目录下的/usr/X11R6/include目录。查看后,该目录有X11子目录,但是没有Xlib.h文件和Xatom.h文件,得知一定是Red Hat Linux系统组件里缺少了什么库或者是包。于是打开
/系统工具>添加或删除软件包
发现在软件开发一项中有一个叫《KDE软件开发》的项目,其说明是“安装这些软件包来开发QT和KDE图形化应用程序”。
于是发现Qtopia 2.2.0编译不通过一定是因为没有安装该软件包的原因。于是安装上了。发现在/usr/X11R6/include/X11/目录下出现了Xlib.h文件和Xatom.h文件。
现在重新编译。仍然没有成功。
附图见上边,Red Hat 9做Qt开发时需要安装的软件包:
编译日志分析,见附件《编译出错的x86-Qtopia.rar 》。


问题二:
编译通不过是因为缺少uuid库。
qpe没法运行就表明qpe没有编译成功,那么也就是qt没有编译成功,而现在又是编译的x86版本的,它用的全部都是系统自带的库和编译器(X86是PC的CPU架构,和交叉编译器无关),那么可以推断出是PC的Linux的问题,而PC的Linux是redhat9,redhat9没有完全安装时至少缺少uuid库,uuid库又是Qt编译时所必须的东东。
我绕了这么大个圈子只想告诉你解决方法:要么重装Redhat9,然后完全安装(真正完全安装的redhat9要4.8G左右);要么安装redhat9的第一张光的RedHat/RPMS/e2fsprogs-1.32-6.i386.rpm,这个就是uuid库的安装包了。

那么初学者该如何知道是缺少什么库才导致编译出错呢?例如本次编译错误所缺少的uuid库。其实方法很简单,在/opt/FriendlyARM/mini2440/x86-qtopia/目录下使用终端#./build 2>&1|tee x86-Qtopia.log命令重新编译Qtopia 2.2.0,并将日志保存在当前目录下的x86-Qtopia.log文件中。通过查找该文件中编译过程的生成的error标记,得知是链接时找不到-luuid命令。具体请看附件《第二次编译出错的x86-Qtopia.rar》。

但是还有一个问题,就是安装了redhat9的第一张光盘的RedHat/RPMS/e2fsprogs-1.32-6.i386.rpm以后,执行ld -luuid的时候,仍然提示找不到-luuid命令。这是为什么呢?难道我们没有成功安装uuid的安装包吗?其实不是,其实在根目录下/lib/目录中,已经成功的安装了libuuid.so.1.2动态链接库了。并且还有个libuuid.so.1的链接。
问题出现这里:我们执行ld链接命令时,链接器查找libuuid.so或者是libuuid.a文件。结果没有找到就提示没有找到命令了。这时只需使用ln命令创建一个名为libuuid.so的符号链接,指向libuuid.so.1.2文件即可。
至此编译友善版x86-Qtopia 2.2.0成功。
./run
顺利进入Qtopia 2.2.0界面。


问题三:
友善之臂x86-Qtopia的hello例子编译好后./run-hello不能运行的问题。
经过查找,得知问题出在hello编译好后安装位置不正确。
我们编译好的hello演示文件,本应安装在/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/image/opt/Qtopia/bin目录下。但是仔细查看./build后自动更新的Makefile文件后发现。hello演示例子被安装到/opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/bin目录下了。这就导致运行./run-hello时提示找不到命令的错误。

我们只需修改hello.pro文件中目标目录的变量即可,在./build时便会自动更新Makefile文件中相应的变量。
将hello.pro文件中的
DESTDIR=$(QPEDIR)/bin
修改成
DESTDIR=$(QPEDIR)/image/opt/Qtopia/bin
重新build即可正确安装到目标位置。

另外run-hello脚本也需要修改。
将其最后一行hello -qws修改为bin/hello -qws即可。
即hello的目录在当前目录下的bin目录中。
./run-hello成功运行。
[ 此帖被cs2003happy在2009-12-30 12:53重新编辑 ]
描述:第一次编译错误时的编译日志log
附件: 编译出错的x86-Qtopia.rar (102 K) 下载次数:389
描述:第二次编译错误时的编译日志log
附件: 第二次编译出错的x86-Qtopia.rar (124 K) 下载次数:287
描述:成功编译时的编译日志log
附件: 成功编译的x86-Qtopia.rar (157 K) 下载次数:339
Continue Study of Embedded Linux Development and Application

奔跑的蜗牛……
级别: 新手上路
UID: 53630
精华: 0
发帖: 29
金钱: 150 两
威望: 30 点
贡献值: 0 点
综合积分: 58 分
注册时间: 2011-08-12
最后登录: 2014-07-23
1楼  发表于: 2011-08-22 18:45
这个要顶