Red Hat 9上编译Qtopia 2.2.0(成功)

更新时间:2024-04-05 10:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

在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-Fri

endlyARM/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) 下载次数:28

描述:第二次编译错误时的编译日志log

附件: 第二次编译出错的x86-Qtopia.rar (124 K) 下载次数:19

描述:成功编译时的编译日志log

附件: 成功编译的x86-Qtopia.rar (157 K) 下载次数:21

Embedded System学习中??

奔跑的蜗牛??

顶端

回复 ? 引用

?

1楼 发表于: 29天前 只看该作者 | 小 中 大

如何获得Linux下make的log?

如何保存控制台对话?

如何将编译过程的信息保存成日志?

编译的过程可能会出错,导致编译过程无法继续进

级别: 新手上路

行。详细分析出错信息,有助于解决源码中的语法错

误。

那么如何保存配置编译过程的信息?这些信息量很

?

大,都可能超出Shell向上翻滚查看的范围。最好是把编译过程的信息保存成日志文件,方便后面的分作者资料

析。

举例说明保存编译信息的行命令,它把make过程打

印的所有信息都保存在xxx.log中。

$make 2>&1|tee xxx.log ? 发送短消息

这条命令是编译并保存打印信息。在Linux Shell的? 加为好友

设备定义中,“0”表示标准输入,“1”表示标准输出,“2”表示标准出错信息输出。2>&1表示把2设UID: 11357

备的信息重定向到1设备;“|”是管道符号,把标精华: 2

准输出的信息直接传递给后面的命令;tee是创建文发帖: 20

件并保存信息的工具;xxx.log是文件名。 金钱: 220 两

这种管道的用法在Linux Shell命令中使用非常普威望: 56 点

遍。编译过程中都可以使用这个方法,生成日志文件,贡献值: 2 点

保存到buildlogs目录下。 综合积分: 60 分

注册时间: 2009-12-04 Embedded System学习中??

最后登录: 2010-01-25 奔跑的蜗牛??

顶端

回复 ? 引用

?

cs2003happy 奔跑的蜗牛??

如何将编译过程的信息

保存成日志

kasim *无钶取玳

2楼 发表于: 29天前 只看该作者 | 小 中 大

Good,大多数时间我们都是在解决错误,别人的或者自己的。分析问题的能力比解决问题本身更重要

顶端

回复 ? 引用

?

级别: 总版主

?

作者资料

?

发送短消息 ? 加为好友

?

QQ联系

UID: 27 精华: 11 发帖: 2707 金钱: 26280 两 威望: 15161 点 贡献值: 70 点 综合积分: 6114 分 注册时间: 2008-01-16 最后登录: 2010-01-25

3楼 发表于: 27天前 只看该作者 | 小 中 大

cs2003happy 奔跑的蜗牛??

正确分析问题的方法

感谢总版主kasim的评阅。

这个问题我是若干天前遇到的。迟迟不能解决是因为

没有找到正确分析问题的方法。

其实作为初学者,解决问题所花费的时间并没有太多,只是如果没有正确的分析方法,我们将无从下手,将大量时间都浪费在了漫无目的的网上搜索和求助

级别: 新手上路

?

作者资料

了。

初学者经常会出现这样类似问题。所以论坛里经常会出现很多\我按照您的意思/方法去做了,可出现XX错误。为何\这样的问题描述。而并没有真正通过编

译日志分析错误的原因。

总结这篇帖子,意思是帮助初学者包括我自己,学习

?

发送短消息 ? 加为好友

UID: 11357 精华: 2 发帖: 20 金钱: 220 两 威望: 56 点 贡献值: 2 点 综合积分: 60 分 注册时间: 2009-12-04 最后登录: 2010-01-25

dannad

级别: 新手上路

?

作者资料

?

发送短消息 ? 加为好友

UID: 12215 精华: 0 发帖: 4 金钱: 20 两 威望: 4 点 贡献值: 0 点 综合积分: 8 分

正确分析问题的方法。

通过本主题和1楼自回帖的方法来分析问题出在哪

里。

Embedded System学习中?? 奔跑的蜗牛??

顶端 ? 回复 ? 引用 4楼 发表于: 23天前 只看该作者 | 小 中 大

学习了!!!

永不止步!!!

顶端 ?

回复 ? 引用

注册时间: 2009-12-31 最后登录: 2010-01-09

lishiyong110 战略很重要

5楼 发表于: 16天前 只看该作者 | 小 中 大

我觉得安装最重要的就是要把RedHat9完全安装,这

级别: 新手上路

?

作者资料

?

发送短消息 ? 加为好友

UID: 12425 精华: 0 发帖: 20 金钱: 100 两 威望: 20 点 贡献值: 0 点 综合积分: 40 分 注册时间: 2010-01-06 最后登录: 2010-01-24 douzidouer

失败的原因只有一个,那就

是半途而废!

级别: 新手上路

?

样很多问题都解决了

顶端 ?

回复 ? 引用

6楼 发表于: 12天前 只看该作者 | 小 中 大 很好,解决了不少问题。

作者资料

?

发送短消息 ? 加为好友

UID: 12490 精华: 0 发帖: 27 金钱: 135 两 威望: 27 点 贡献值: 0 点 综合积分: 54 分 注册时间: 2010-01-07 最后登录: 2010-01-25 Qtopia 2.1.1 移植 2009-02-08 21:20 本人运行环境:

主机:Red.Hat.9.0(完全安装) 交叉编译器:arm-linux-gcc-2.95.3

开发板平台:S3C2440(GEC-2440开发板)

目标板linux内核版本:26.24.4 / 目标板bootloader :u-boot 1.2 前面曾做过这个Qtopia 1.7+qte-2.3.7 交叉编译,其实这里的qtopia

2.1.1+qte-2.3.10 也是类似的,问题是我在做qte-2.3.7 时发现它对触摸屏的支持不是那么好,校准不了,所以想使用tslib来校准支持,但qte-2.3.7对tslib的支持比较繁杂,需要修改源码等等,虽我也从网上收集资料尝试修改,但没成功,所以就选用了qtopia 2.1.1+qte-2.3.10 ,因为qte-2.3.10有-tslib支持的选项,可使用tslib进行触摸屏坐标校准。

参考博客:http://blog.chinaunix.net/u2/86665/showart_1721283.html

http://zxuhong.bokee.com/4631068.html

http://www.diybl.com/course/6_system/linux/Linuxjs/2008722/133677.html

http://www.hzlitai.com.cn/article/ARM9-article/example/1481.html http://zxuhong.bokee.com/4631068.html 软件:

cross-2.95.3.tar.bz2

qtopia-free-src-2.1.tar.gz

qt-embedded-2.3.10-free.tar.gz tmake-1.11.ar.gz

qt-x11-2.3.2.tar.gz

e2fsprogs-1.39.tar.gz jpegsrc.v6b.tar.gz bpng-1.2.14.tar.bz2 tslib-1.3.tar.bz2 zlib-1.2.3.tar.bz2

1. 得到本机运行版本uic 工具

为了编译qtopia ,需要下载QT/Embedded,但是为了编译QT/Embedded,又需要QT/X11的 uic编译器(它将qt2-designer创建的UI格式的文件转换成cpp文件)。

如果做过我前面:QT的安装配置 之 (二) : ARM平台交叉编译实验的,可直接从qt-x11-2.3.2拷来需要的文件即可,但考虑到编译器不一样可能会有错误,还是重新编译下吧。 #cd qt-x11

#export QTDIR=$PWD

#export PATH=$QTDIR/bin:$PATH

#export LD_LIBRARY_PATH=$QTDIR/lib:$ LD_LIBRARY_PATH #./configure -static -no-xft -no-opengl -no-sm #make -C src/moc #cp src/moc/moc bin #make -C src

2. 编译相关库

mkdir $MYHOME/arm/

将上面的e2fsprogs-1.39.tar.gz.tar.gz,jpegsrc.v6b.tar.gz,

libpng-1.2.14.tar.bz2,tslib-1.3.tar.bz2,zlib-1.2.3.tar.bz2解压至$MYHOME/arm目录(你也可以自己指定目录),并相应更名目录为 e2fs,jpeg,libpng,tslib,zlib。并建立mkdir $MYHOME/arm/lib ;mkdir $MYHOME/arm/include (这两个目录是存放编译后的库与头文件,为后面交叉编译用)

mkdir $MYHOME/arm/lib mkdir $MYHOME/arm/include 然后分别编译: 1.e2fs:

cd $MYHOME/arm/e2fs

./configure --host=arm-linux

--enable-elf-shlibs--with-cc=arm-linux-gcc --with-linker=arm-linux-ld --prefix=/usr/local/arm/2.95.3/arm-linux make

cp lib/libuuid.so* ../lib 2.jpeg:

cd $MYHOME/arm/jpeg

./configure –enable-shared gedit Makefile & 修改:

CC= arm-linux-gcc AR= arm-linux-ar rc AR2=arm-linux-ranlib

注意:第一个和后两个不在一起,你要搜索一下CC,AR找到后用#注释掉原来的,加上新的。 例如:

#AR= ar rc

AR= arm-linux-ar rc make

cp *.h ../include/ cp libjpeg.a ../lib/ 3.zlib:

cd $MYHOME/arm/zlib ./configure -shared gedit Makefile & 修改: [begin] ...

CC=arm-linux-gcc ...

LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1 CPP=arm-linux-gcc -E ...

AR=arm-linux-arrc

RANLIB=arm-linux-ranlib ...

prefix =/usr/local/arm/2.95.3/arm-linux ... [end] make

cp libz.so* ../lib/ cp *.h ../include/ 4.libpng:

cd $MYHOME/arm/libpng

cp scripts/makefile.linux ./Makefile gedit Makefile & 修改: [begin] ...

AR_RC=arm-linux-ar rc

CC=arm-linux-gcc ...

RANLIB=arm-linux-ranlib ...

prefix=/usr/local/arm/2.95.3/arm-linux ... [end] make

cp libpng12.so* ../lib/

cp libpng12.so ../lib/libpng.so cp *.h ../include/

5.tslib

参考前面实验文章:

tslib的编译与使用 (触摸屏校准工具)

以上编译后所需要的库文件与头文件都分别放在arminculude 与 armlib 文件夹,或者这些库可以到网上下载,某些大侠都会编译好上传的。 3. Install tmake

tmake用于交叉编译生成qt应用程序的makefile, 也可用于生成qt的本地makefile

tar zxvf tmake-1.11.tar.gz

vi tmake-1.11/lib/qws/linux-arm-g++/tmake.conf

TMAKE_LINK=arm-linux-g++ //将原来的arm-linux-gcc 改成 arm-linux-g++

TMAKE_LINK_SHLIBS=arm-linux-g++ 4. Install Qt/Embedded

把前面编译好的uic文件拷到文件的bin下 tar zxvf qt-embedded-2.3.10.tar.gz export QTDIR=../qt

export TMAKEDIR=../tmake

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export

PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:/usr/local/arm/2.95.3/bin:$PATH

cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/

./configure -xplatform linux-arm-g++ -no-qvfb -no-xft -qconfig qpe -shared -thread -depths 16 -system-jpeg -gif -tslib -I /home/arm-qt/tslib-1.3/build/include -L

/home/arm-qt/tslib-1.3/build/lib/ -L /home/arm-qt/armlib/ -I /home/arm-qt/arminclude/ make sub-src

配置中选择了tslib的支持,即QT的触摸屏支持由tslib实现,后面的-L,-I 指定了库的路径。

5.Build Qtopia

打开解压后的qtopia-2.1.1

cp /root/qt-arm/e2fsprogs/build/lib/libuuid.so* /usr/local/arm/2.95.3/lib/

cp /root/qt-arm/e2fsprogs/build/lib/libuuid.so* /usr/local/arm/2.95.3/arm-linux/lib/ cp -a /usr/include/uuid include/ export QTDIR=$QTEDIR

export PATH=$PWD/bin:$PATH

export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH cd src/

./configure -xplatform linux-arm-g++ 需要交叉编译 make

make install

上面的编译过程肯定不可能很顺利的,总会提示少这个文件少那个文件的,只能在编译过程中发现少了什么库文件,就相应添加相应库文件。

最后编译编译成功在qtopia 文件中有个image文件夹就是我们可以移植到开发板所需要的文件,拷贝到开发板的文件系统里,开机运行qpe 即可进入qtopia,运行可能出现了少了库文件,可在主机上通过查找文件把缺少的文件加上(一般是之前编译的库文件)

目标板上的profile 设置环境变量: export QTDIR=/qtopia export QPEDIR=/qtopia

export LD_LIBRARY_PATH=/lib:/usr/lib:$QPEDIR/lib

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$QPEDIR/bin export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_TSDEVICE=/dev/event0

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_PLUGINDIR=/tslib/share/ts/plugins export TSLIB_CONFFILE=/etc/ts.conf

export QWS_MOUSE_PROTO=TPanel:/dev/event0 效果图:

友善之臂X86-QTOPIA编译问题

编译源码时出现了附件中的错误,由以上可知,是缺少luuid,经查找是缺少e2fsprogs-1.39.tar.gz这个包,已经下载了这个文件,接下来该怎么做???

[ 本帖最后由 jxb01033016 于 2009-9-4 11:47 编辑 ]

附件

EEWORLD提示:为减少服务器的压力,请尽量不要使用迅雷等下载软件。

QT.jpg (58.3 KB)

2009-9-4 11:47

推荐博客

【cuizhihao】LPC1343学习心得 ? 【wuquan-1230】汇编的进制转换程序 ? 【itneers】我为什么离开ARM ? 【416561760】行业中那些东西是进口的? ? 深圳市光伟达科技有限公司,专业销售精密低阻功率电阻,详情请登陆网站:

[qq]66545301[/qq]

TOP↑

沙发 大 中 小 发表于 2009-9-4 15:05 只看该

作者

daicheng

超级版主 芯币 7342 枚

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线

cannot find -luuid 是说缺少libuuid.so*等动态库,你需要交叉编译e2fsprogs-1.39.tar.gz这个包,这样便可获得libuuid.so*,然

daicheng的全部文章

后将它们拷到你的对应的qtopia-2.2.0的lib目录下。。再

make. 处处留心皆学

问!

TOP↑

巨牛!一套仪器实现全部I-V测试功能?! 板凳 大 中 小 发表于 2009-9-4 16:23 只看该作者

jxb01033016 光伟达科技

OK了

先上图,等下

版主

专业销售精密低阻

功率电阻

芯币 7485 枚

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线

jxb01033016的全部文章

再把过程说下.

深圳市光伟达科技有限公司,专业销售精密低阻功率电阻,详情

请登陆网站: [qq]66545301[/qq]

TOP↑

巨牛!一套仪器实现全部I-V测试功能?!

jxb01033016 光伟达科技

4楼 大 中 小 发表于 2009-9-4 16:40 只看该作者

#tar -zxvf x86-qtopia--2.2.0.tgz

#cd x86-qtopia

版主

./build-all

这个时候出现了问题:

/usr/bin/ld: cannot find -luuid

? 个人空间 ? 发短消息 ? 加为好友 ? 当前离线

专业销售精密低阻

功率电阻

芯币 7485 枚

collect2: ld returned 1 exit status make[5]: *** [../../../lib/libqpe.so.1.5.3] Error 1

make[4]: *** [all] Error 2

make[3]: *** [sub-libraries-qtopia] Error 2

make[2]: *** [all] Error 2 make[1]: *** [all] Error 2

jxb01033016的全部文章

只好去编译e2fsprogs-1.39.tar.gz

#tar -zxvf e2fsprogs-1.39.tar.gz

#cd e2fsprogs-1.39

#./configure

#make

以上我都正常完成,现在拷贝/e2fsprogs-1.39/lib/libuuid.a到/usr/lib

再回到x86-qtopia

#cd x86-qtopia

# ./build-all

新的问题出现:

/opt/FriendlyARM/X86-qtopia/qtopia-2.2.0-Friendly/qtopia/lib/libqtop

ia.so: undefined reference to `uuid_generate'

collect2: ld returned 1 exit status make[6]: *** [fifteen] Error 1 make[5]: *** [all] Error 2

make[4]: *** [sub-games-fifteen] Error 2 make[3]: *** [sub-src-components_pro] Error 2

make[2]: *** [all] Error 2 make[1]: *** [all] Error 2

解决办法:

#cd e2fsprogs-1.39

#./configure --enable-elf-shlibs

#make

#cp -rf lib/libuuid.so* /usr/lib

#./build-all #./run

qt画面终于出现了!

用户名 用户名密码 登录论坛

记住信息

| 网站首页 | 注册账号 | 论坛帮助 | 欢迎来到LinuxSir.Org! 您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。 LinuxSir.Org > 编程开发讨论区 —— LinuxSir.Org > 嵌入式Linux讨论区──实验田版 > LINUX下Qt学习点滴! 转到页面...

主题工具 ??06-08-04, 18:42 ??06-08-04, 18:42 第 1 帖 第 1 帖 第 1 帖 ??lfangqing2003 主题工具 第 1 帖 ??lfangqing2003 ??06-08-04, 18:42 06-08-04, 18:42 ??lfangqing2003 ??lfangqing2003 第 1 帖 ??lfangqing2003 ??lfangqing2003 lfangqing2003

注册会员

注册日期: Apr 2005 帖子: 3 精华: 0

标题: LINUX下Qt学习点滴!

标题: LINUX下Qt学习点滴!

首先我们来介绍一下这几个文件: arm-linux-gcc-3.4.1.tar.bz2

这个文件解压后形成usr/local/arm/3.4.1,里面的bin目录里含有用于交叉编译在ARM-linux系统上的运用程式时用的编译联接程序和共享联接库. 比如:

后面用到的arm-linux-gcc,arm-linux-g++.

(交叉编译:将源文件编译联接成能够在目标机器上运行的可执行文件) qt-embedded-2.3.10-free.tar.gz

这个文件解压后形成qt-2.3.10.里面的bin目录里含有模拟目标机器的qvfb后台程序等,比如: -rwxr-xr-x 1 root root 408332 8月 1 16:10 moc -rwxrwxr-x 1 515 515 217013 2005-06-27 qvfb -rwxrwxr-x 1 515 515 280629 2005-06-27 uic

.以及程序在qvfb上PC机模拟运行时需要加载的库文件和可以通过arm-linux-g++编译出在ARM-linux系统上运行Qt所要加载的库文件. 比如:

drwx------ 2 515 515 16384 2005-01-23 fonts/

lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so -> libqte.so.2.3.10 lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so.2 -> libqte.so.2.3.10 lrwxrwxrwx 1 root root 16 8月 1 16:23 libqte.so.2.3 -> libqte.so.2.3.10 -rwxr-xr-x 1 root root 6671698 8月 1 16:23 libqte.so.2.3.10

qtopia-free-source-2.1.1.tar.bz2这个文件解压后形成qt-2.1.1,里面是Qtopia平台.Qtopia是TrollTech公司为采用嵌入式linux系统的消费电子设备而开发的综合应用平台.

qt-x11-2.3.2.tar.gz这个文件解压活形成qt-2.3.2,里面的bin目录里含有在PC机器上的运行的开发工具和编译程序, 比如:

-rwxr-xr-x 1 root root 2350402 8月 1 15:53 designer

-r-xr-xr-x 1 500 1000 4160 2001-01-26 findtr

-rwxr-xr-x 1 root root 320277 8月 1 15:41 moc

-r-xr-xr-x 1 500 1000 8065 2001-01-26 qt20fix

-r-xr-xr-x 1 500 1000 5324 2001-01-26 qtrename140 -rwxr-xr-x 1 root root 280629 8月 1 15:49 uic

lib目录里含有源文件编译成PC机器X11环境下的共享联接库,比如: lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so -> libqt.so.2.3.2

lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so.2 -> libqt.so.2.3.2

lrwxrwxrwx 1 root root 14 8月 1 15:49 libqt.so.2.3 -> libqt.so.2.3.2-rwxr-xr-x 1 root root 6445720 8月 1 15:49 libqt.so.2.3.2

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so -> libqutil.so.1.0.0

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so.1 -> libqutil.so.1.0.0

lrwxrwxrwx 1 root root 17 8月 1 15:49 libqutil.so.1.0 -> libqutil.so.1.0.0

-rwxr-xr-x 1 root root 41568 8月 1 15:49 libqutil.so.1.0.0 tmake-1.13.tar.gz这个文件解压后形成tmake-1.13,里面bin目录里含有用于组织生成.pro文件的progen工具,和组织生成Makefile的tmake工具.以后经常会用到. 比如:

-r-xr-xr-x 1 500 users 6150 2003-08-01 progen

-r-xr-xr-x 1 500 users 32933 2004-01-28 tmake

-r--r--r-- 1 500 users 118 2003-08-01 tmake_win /*************************************************************************************************** *

* 安装与建立Qt桌面环境 *

***************************************************************************************************/ 实验室设备和工具:

Hardware:PC机Pentumn500 or better,硬盘10G or more. Software:PC机OS(操作系统)RedHat Linux 9.0 + minicom + ARM-linux开发环境,tmake-1.13.tar.gz,qt-embedded-2.3.10-free.tar.gz,qt-x11-2.3.2.tar.gz

///////////////////////////////////////////////////////////////Qt/Embedded平台的搭建///////////////////////////////////////////////////////////////////////////

首先我们假设所有的压缩包放在/qt目录里,当前用户为root. 第一步:解压安装包( |压缩包)并设置环境变量.

1.install Tmake(解压安装Tmake,说明白点就是前面说的形成tmake-1.13) cd /qt

tar -xzf tmake-1.13.tar.gz export TMAKEDIR=$PWD/tmake-1.13

2.install Qt 2.3.2(解压安装qt-2.3.2,说明白点就是前面说的形

成qt-2.3.2) cd /qt

tar -xzf qt-x11-2.3.2.tar.gz export QT2DIR=$PWD/qt-2.3.2

3.install Qt/Embedded(解压安装Qt/Embedded,说明白点就是前面说的形成qt-2.3.10) cd /qt

tar -xzf qt-embedded-2.3.10-free.tar.gz export QTEDIR=$PWD/qt-2.3.10

环境变量的设置很重要,它关系到能否正确的安装及编译这些安装包(|压缩包),介绍下这些环境变量: TMAKEDIR:指向用于编译Qt/Embedded的Tmake工具,也就是要指向刚才tmake-1.13.tar.gz解压出来的tmake-1.13)

QT2DIR:指向qt-2.3.2,也就是要指向刚才qt-x11-2.3.2.tar.gz解压出来的qt-2.3.2)

QTEDIR:指向Qt/Embedded 2.3.10的文件夹,也就是要指向刚才qt-embedded-2.3.10-free.tar.gz解压出来的qt-2.3.10) 第二步:编译Qt/Embedded. 1.Build Qt 2.3.2 cd $QT2DIR

export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make

cp bin/uic $QTEDIR/bin/

注意:./configure是对Qt进行配置,它包括很多选项,例如可以通过添加\等,如果想要进一步了解可以通过命令./congiure --help来获得更多帮助信息.编译完成后要将生成的/bin/uic复制到$QTEDIR下的目录/bin中,随后编译Qt/Embedded的时候会用到这个工具. 2.Build Qt/Embedded (for PC机上的x86平台) cd $QTDIR

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft -qvfb -depths 4,8,16,32 make

在配置./configure 中-qvfb用来支持Virtual framebuffer,-depths 4,8,16,32支持4,8,16,32位显示色深.此外还可以添加-system-jpeg和-gif来提供对jpeg

和gif的支持.配置系统同时还支持对特定平台系统选项的添加.但一般来说,支持Virtual framebuffer的LINUX系统都可以使用\平台.详情请见./configure --help命令.

第三步:生成可执行文件并且在Virtual framebuffer上运行,测试Qt桌面环境

/*************************************************************************************************** *

* 源代码生成可执行文件,并且在Virtual framebuffer上运行,此处Vitual framebuffer为qvfb *

***************************************************************************************************/

一个源代码文件要能够在开发板上运行,首先应能够在Virtual framebuffer上显示出来,然后通过交叉编译在开发板上运行.

现我们有一个hello.cpp文件.如下: /*************************************************************************************************** *

* hello.cpp *

***************************************************************************************************/ #include #include

int main(int argc,char **argv) {

QApplication app(argc,argv); QLabel *hello=new QLabel(\lo World!\

app.setMainWidget(hello); hello->show();

return app.exec(); }

文件保存在/home/alpha/pro下 要在PC机上的Virtual framebuffer中显示结果,下面几步是必需的. 1.生成工程文件.pro

每个Qt程式都对应着一个工程文件,因为tmake工具要借此文件生成相应

的Makefile文件提供给make进行编译联接.生成工程文件需要使用progen工具,位置在tmake-1.13/bin下,使用progen生成工程文件的方法如下:

A. 进入含有源文件的目录.如:cd /home/alpha/pro

B. 运行progen工具生成.pro文件.如ello.pro

注意:-o 选项是指定输出文件的文件名.比如上面的生成的工程文件名是hello.pro,生成的这个.pro文件是可以修改的,可以编辑里面的头文件HEADERS,文件来源SOURCE等.

2.生成Makefile文件

Qt提供了生成Makefile文件的工具tmake,在tmake-1.13/bin目录下,可以根据不同平台的需要生成适合于不同平台的Makefile文件.

在使用tmake工具前,应查看相应的环境变量是否正确,由于我们要编译在PC机上运行的Qt程式,所以指定的编译器应该是含有\-x86-g++\在命令行里键入命令检查环境变量是否正确. echo $TMAKEPATH

查看返回的结果的结尾字符是否是\如果不是的话应该重新设置TMAKEPATH.

export TMAKEPATH=tmake的安装路径($TMAKEPATH)/lib/qws/linux-x86-g++

注意:TMAKEPATH是指定tmake的位置,比如我的tmake安装在/qt/tmake-1.13下,我就设置TMAKEPATH为:

export TMAKEPATH=/qt/tmake-1.13/qws/linux-x86-g++ 此外还要使QTDIR指向Qt/Emb

rogen -t app.t -o h

edded的安装路径,如: export QTDIR=$QTEDIR 或者直接指定路径

export QTDIR=/qt/qt-2.3.10

注意:因为我的Qt/Embedded安装在/qt/qt-2.3.10下,所以才是export QTDIR=/qt/qt-2.3.10 完成了上面的环境变量的设置,并用echo命令检查无误后,就可以使用tmake工具来生成我们需要的Makefile文件了,键入命令

tmake -o Makefile hello.pro

注意:-o选项是指定生成的Makefile文件名为Makefile,tmake是用前面progen生成的工程文件.pro来生成Makefile文件的.完成上面的步骤后就可以在当前目录里生成一个Makefile文件了.

3.使用LINUX系统自带的make来进行整个程式的编译联接了,生成一个二进制的可执行文件hello. 进入含有刚才tmake生成的Makefile文件的目录,键入命令make,如:我生成的Makefile文件放在/home/alpha/pro下,就: cd /home/alpha/pro make

我再查看确认下, 在命令行下键入命令: ls -lp /home/alpha/pro 结果果然生成了hello,结果如下:

-rwxr-xr-x 1 root root 76454 8月 2 10:32 hello -rw-r--r-- 1 root root 245 8月 2 09:28 hello.cpp -rw-r--r-- 1 root root 95300 8月 2 10:32 hello.o -rw-r--r-- 1 root root 91 8月 2 10:32 hello.pro -rw-r--r-- 1 root root 1615 8月 2 10:32 Makefile

注意:这几步可能要很高的权限,为避免不必要麻烦,我是用root用户来完成的.因为我在普通用户下是,会出现有的文件,库无法查看,加载. 4.在Virtual framebuffer运行程式. A.进入含有生成的二进制文件的目录 B.运行qvfb来模拟Virtual framebuffer C.在qvfb上加载二进制文件,运行程式.如: cd /home/alpha/pro

qvfb -width 640 -height 480 & /home/alpha/pro/hello -qws

注意:-width 640 -height 480是指定Virtual framebuffer模拟器的长为640橡素,宽为480像素.qvfb还有很多选项,详情请见qvfb --help命令.此步可能要先设置环境变量.使得系统能够找到qvfb,以及qvfb和程式运行时需要加载的库文件,也最好是用root用户登录,原因见前述.设置如下: export QTDIR=$QTEDIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBRARY_PATH

其中QTDIR和QTEDIR是指向Qt/Embedded目录的,也就是前面安装解压出来的qt-2.3.10,PATH是指向Qt/Embedded目录(也就是前面安装解压出来的qt-2.3.10)下的bin目录,因为哪里有我们要用到的qvfb程式,LD_LIBRARY_PATH是指向Qt/Embedded目录下的lib目录,(也就是前面安装解压出来的qt-2.3.10)下的lib目录,因为哪里有我们要用到的qvfb程式和二进制程式要加载的库文件.比如:libqte.so,libqte.so.2,libqte.so.2.3,libqte.so.2.3.10

/*************************************************************************************************** * * 心得 *

***************************************************************************************************/ 不知你是否发现,每次编译,运行程式前都要进行一大堆的环境变量设置,是不是好烦呢?我们俨然或貌似成了打字机了,有更好的方法吗?我们可以将这些环境变量写成一个文件,编译运行程式前,或是打开一个终端(console)是就执行它.首先在自己的工作目录下有一个.bash_profile存放环境变量的.比如我的是/root/.bash_profile,我们先打开看看它是怎么设置的,学来用用.命令行里键入命令:

[root@localhost:~]#cat /root/.bash_profile 来查看下这个文件. # .bash_profile

# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH unset USERNAME

好,我们可以尝试着写一个定义自己的环境变量,或者依样画葫芦,在里面加上自己的变量.(记得写前将原来的文件备份下,出了事故可以来还原)

[root@localhost:~]vi /root/.bash_profile 我把它写成如下: # .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then . ~/.bashrc fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:$QTDIR/bin:$TMAKEDIR/bin TMAKEDIR=/qt/tmake-1.13 TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ QT2DIR=/qt/qt-2.3.2 QTEDIR=/qt/qt-2.3.10 QTDIR=$QTEDIR

LD_LIBRARY_PATH=$QTDIR/lib:$QT2DIR/lib

export PATH TMAKEDIR TMAKEPATH QT2DIR QTEDIR QTDIR LD_LIBRARY_PATH unset USERNAME

保存后退出vi,我们再在终端里用.命令执行下这个文件

[root@localhost:~]. /root/.bash_profile

注意:看清这个命令,不要漏点了.好我们再来查看一下我们设置的环境变量有没有成功.同样终端里键入命令echo

[root@localhost:~]echo $QTDIR

命令返回的是: /qt/qt-2.3.10

看来是成功了,以后打开终端时用.命令执行下这个脚本文件就可以了.

/*************************************************************************************************** *

* 交叉编译简介 *

***************************************************************************************************/

为避免我们编译ARM-linux系统上用的Qt库是将原来PC机上RedHat linux系统上的Qt库覆盖掉,新建了一个/qt-embedded目录,并将我们要用到的文件复制到这个目录.文件有: [root@localhost root]# cd /qt-embedded [root@localhost qt-embedded]# ls -lp

-r-xr-xr-x 1 root root 42745480 4月 3 15:39 arm-linux-gcc-3.4.1.tar.bz2 -r-xr-xr-x 1 500 root 19106992 8月 1 15:33 qt-embedded-2.3.10-free.tar.gz 首先将他们解压安装在这个目录下:

[root@localhost qt-embedded]tar xfz arm-linux-gcc-3.4.1.tar.bz2 [root@localhost qt-embedded]tar xfz qt-embedded-2.3.10-free.tar.gz 现在来解释下,解压下来的文件的作用.

arm-linux-gcc-3.4.1.tar.bz2解压生成usr目录,其下的目录usr/local/arm/3.4.1/bin含有我们编译Qt在ARM-LINUX系统要用到的库文件的编译程式arm-linux-g++

qt-embedded-2.3.10-free.tar.gz解压生成qt-2.3.10目录,其下的目录里的configure生成适用于ARM-LINUX系统的Makefile文件来编译用于ARM-LINUX系统的Qt库,如libqte.so,libqte.so.2,libqte.so.2.3,libqte.so.2.3.10

1.Build Qt/Embedded (for ARM-LINUX平台) cd $QTEDIR

export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export QTDIR=$QTEDIR

export PATH=$QTDIR/bin:$PATH:/qt-embedded/usr/local/arm/3.4.1/bin export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32 make

注意:解析一下这些环境变量,QTEDIR指向在当前目录里刚解压出来的/qt-embedded/qt-2.3.10,QTDIR也是指向这里,PATH里的最后一项\要指向含有arm-linux-g++的目录(上面已解释了arm-linux-g++的作用),即刚从arm-linux-gcc-3.4.1.tar.bz2里解压出来的/usr/local/arm/3.4.1/bin

这步完成后,我们会在$QTEDIR/lib/目录(我的是/qt-embedded/qt-2.3.10/lib/)下面看到libqte.so,libqte.so.2,libqte.so.2.3,libqte.so.2.3.10这四个文件,我们可以用file命令来查看这个库文件是否是我们需要的在开发安装与建立Qt桌面环境板(ARM-LINUX)上跑的库.终端键入命令: [root@localhost:~]file $QTEDIR/lib/libqte.so.2.3.10 命令返回:

libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped,有了这个库以后就可以把它拷贝到我们的开发板相应的库目录下面,这里我们选择了开发板上的/usr/lib目录,假设本机的IP地址为192.168.0.56并且/root/share为共享文件夹.

[root@localhost:~]mount -t nfs -o nolock 192.168.0.56:/root/share /mnt/nfs

将文件复制到开发板上.

[root@localhost:~]cp -arf $QTEDIR/lib libqte.so* /root/share [root@localhost:~]cp -arf /mnt/nfs/libqte.so* /usr/lib

注意:QTEDIR指向在当前目录里刚解压出来的/qt-embedded/qt-2.3.10 2.修改tmake配置文件

[root@localhost:~]vi $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf

将其中的\x-gcc\

\-gcc\

修改为: \x-g++\

\-g++\

注意:TMAKEDIR:指向用于编译Qt/Embedded的Tmake工具,也就是要指向tmake-1.13.tar.gz解压出来的tmake-1.13) 3.生成可执行文件

见上面的安装与建立Qt桌面环境,第三步:生成可执行文件并且在Virtual framebuffer上运行,测试Qt桌面环境的生成可执行文件1,2,3步. 其中在2步是,TMAKEPATH的环境变量的结尾字符是\g++\因为编译的可执行文件是要在ARM-LINUX平台运行的.其它的请按照我叙述的大意,设置好就可以了. 4.运行文件也是同样的方法,只是不要在qvfb里运行了,直接找到那个可执行文件,在终端进入可执行文件的目录运行命令

./filename -qws

其中filename为你的可执行文件的名字.

/***************************************************************************************************

本文来源:https://www.bwwdw.com/article/jixr.html

Top