Red Hat 9上编译Qtopia 2.2.0(成功)
更新时间:2024-04-05 10:58:01 阅读量: 综合文库 文档下载
- red推荐度:
- 相关推荐
在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
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为你的可执行文件的名字.
/***************************************************************************************************
正在阅读:
Red Hat 9上编译Qtopia 2.2.0(成功)04-05
2014广西教师招聘考试《教育学与教学法基础知识》总结08-18
2014(3年中考2年模拟)英语(全国版)专题二 单项选择-名词(pdf版含答案解析)08-13
家门口的向日葵作文600字07-05
摘抄拟人句集锦11-20
我最熟悉的人作文800字07-04
利用西门子840D系统实现自动记录切削时间编程原理及实例分析04-01
最棒的礼物作文700字06-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 编译
- 成功
- Qtopia
- Red
- Hat
- 2.2
- 1.光伏专业实习计划
- 螺纹连接例题与测试题汇总
- 枣阳人外地就医报销资料查询
- 泵与泵站(姜乃昌)试题
- 社会责任系统考试题(有答案)-呕心沥血之作 - 图文
- (2014版)家畜解剖学专科网上作业题参考答案(1)
- 科举制的诞生
- 2018-2019年云南省昆明市二模:昆明市2018届高三第二次模拟考试
- 工业污染源产排污系数使用常见问题释疑
- 幼儿环境布置练习答案
- 东方网景邮箱系统v5.0用户使用手册
- 管理者执行不利的十大病因+试题答案
- 基于51单片机的温度控制系统的设计 - 图文
- 2013-2014陕旅版四年级下册英语期末试题 - 图文
- dek印刷机程式教学
- 学习中的苦与乐
- 索尼黑卡RX100设置与后期详解
- 关于竣工资料收集、编制的指导方案
- 在全县烟草专卖及“两烟”打假打私工作会议上的讲话(1)
- 中国罗汉松行业分析报告