LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4564|回复: 1

LINUX下Qt学习点滴!

[复制链接]
发表于 2006-8-4 18:42:42 | 显示全部楼层 |阅读模式
首先我们来介绍一下这几个文件:
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桌面环境
*
***************************************************************************************************/
实验室设备和工具:
HardwareC机Pentumn500 or better,硬盘10G or more.
SoftwareC机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/binPATH
export LD_LIBRARY_PATH=$QTDIR/libLD_LIBRARY_PATH
./configure -no-xft
make
cp bin/uic $QTEDIR/bin/
注意:./configure是对Qt进行配置,它包括很多选项,例如可以通过添加"-no-opengl"等,如果想要进一步了解可以通过命令./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/binPATH
export LD_LIBRARY_PATH=$QTDIR/libLD_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系统都可以使用"linux-generic-g++"平台.详情请见./configure --help命令.

第三步:生成可执行文件并且在Virtual framebuffer上运行,测试Qt桌面环境
/***************************************************************************************************
*
*                        源代码生成可执行文件,并且在Virtual framebuffer上运行,此处Vitual framebuffer为qvfb
*
***************************************************************************************************/

一个源代码文件要能够在开发板上运行,首先应能够在Virtual framebuffer上显示出来,然后通过交叉编译在开发板上运行.
现我们有一个hello.cpp文件.如下:
/***************************************************************************************************
*
*                                                        hello.cpp
*
***************************************************************************************************/
#include<qapplication.h>
#include<qlabel.h>

int main(int argc,char **argv)
{
        QApplication app(argc,argv);
        QLabel *hello=new QLabel("Hello World!",0);
        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文件.如:progen -t app.t -o hello.pro
注意:-o 选项是指定输出文件的文件名.比如上面的生成的工程文件名是hello.pro,生成的这个.pro文件是可以修改的,可以编辑里面的头文件HEADERS,文件来源SOURCE等.
2.生成Makefile文件
Qt提供了生成Makefile文件的工具tmake,在tmake-1.13/bin目录下,可以根据不同平台的需要生成适合于不同平台的Makefile文件.
在使用tmake工具前,应查看相应的环境变量是否正确,由于我们要编译在PC机上运行的Qt程式,所以指定的编译器应该是含有"linux-x86-g++",在命令行里键入命令检查环境变量是否正确.
echo $TMAKEPATH
查看返回的结果的结尾字符是否是"...../qws/linux-x86-g++",如果不是的话应该重新设置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/Embedded的安装路径,如:
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/binPATH
export LD_LIBRARY_PATH=$QTEDIR/libLD_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=$PATHHOME/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=$PATHHOME/binQTDIR/binTMAKEDIR/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里的最后一项"/qt-embedded/usr/local/arm/3.4.1/bin要指向含有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
注意TEDIR指向在当前目录里刚解压出来的/qt-embedded/qt-2.3.10
2.修改tmake配置文件
[root@localhost:~]vi $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
将其中的"TMAKE_LINK=arm-linux-gcc"
        "TMAKE_LINK_SHLIB=arm-linux-gcc"
修改为: "TMAKE_LINK=arm-linux-g++"
        "TMAKE_LINK_SHLIB=arm-linux-g++"
注意:TMAKEDIR:指向用于编译Qt/Embedded的Tmake工具,也就是要指向tmake-1.13.tar.gz解压出来的tmake-1.13)
3.生成可执行文件
见上面的安装与建立Qt桌面环境,第三步:生成可执行文件并且在Virtual framebuffer上运行,测试Qt桌面环境的生成可执行文件1,2,3步.
其中在2步是,TMAKEPATH的环境变量的结尾字符是"../qws/linux-arm-g++",因为编译的可执行文件是要在ARM-LINUX平台运行的.其它的请按照我叙述的大意,设置好就可以了.
4.运行文件也是同样的方法,只是不要在qvfb里运行了,直接找到那个可执行文件,在终端进入可执行文件的目录运行命令
./filename -qws
其中filename为你的可执行文件的名字.
/***************************************************************************************************
*                                        EOF,这个是我安装和使用Qt时的一些知识,
*                                        希望对广大的Qt爱好者有所帮助.
*                                        其中最有心得的是,一个在WINDOW系统下用五笔的人,
*                                        在LINUX系统下用智能拼音一个个字拼是很辛苦的,
*                                        哪一天能够用这种毅力来给心爱的+发消息就好了
***************************************************************************************************/

/////////////////////////////////////////////////////////////////////////////////////////////////////
发表于 2006-8-5 14:34:45 | 显示全部楼层
加你qq的时候,怎么有个问题验证
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表