您的位置:首页 > 编程语言 > Qt开发

red hat 9.0 上安装qt4 分类: 嵌入式开发学习 2011-05-14 23:27 598人阅读 评论(0) 收藏

2011-05-14 23:27 495 查看
1.什么是QT

Qt是一个完整的C++应用程序开发框架。它包含一个类库,和用于跨平台开发及国际化的工具。Qt API在所有支持的平台上都是相同的,Qt工具在这些平台上的使用方式也一致, 因而Qt应用的开发和部署与平台无关。

2.什么是Qt/Embedded

Qt/Embedded 是一个完整的自包含GUI和基于Linux的嵌入式平台开发工具。这个开发工具的名字好像最容易混淆,当然Qt/Embedded是最熟悉的名字,好像 Qtopia Core说的也是它。最近,奇趣公司又该名字了,它的新名字叫做qt-embedded-linux-xxxx。这只是命名的方式不同而已。

3.什么是Qt-x11

Qt-x11是一个面向x11窗口系统(关于Unix linux 的x-window这里就不在具体介绍)的全方位开发平台。它编译后可以生成designer (qt的图形设计工具)、qvfb(在pc机上模拟嵌入式产品的运行)等工具。

4.什么是Qtopia

Qtopia 是一个面向嵌入式Linux的全方位应用程序开发平台,同时也是用于基于Linux的PDA(个人数字助理),智能电话(Smartphone)以及其他 移动设备的用户界面。简单地说,Qtopia实质上是一组关于PDA和智能电话的应用程序结合,如果需要开发这类产品可以在这组程序的基础上迅速构建出 PDA或者智能电话。Qtopia实质上依赖Qt/Embedded。

文章的阅读者:

①阅读此文章应该有linux基本应用基础和有在linux下安装软件的经验。

②阅读了有关qt的基础。

下面就是搭建Qt开发平台了,我的平台是red hat 9.0 ,需要的Qt版本有两个:

qt-embedded-linux-opensource-src-4.5.0.tar.gz

qt-x11-opensource-src-4.5.0.tar.gz

因现在nokia收购了qt现在的下载地址:ftp://ftp.qt.nokia.com/qt/source/

一:对这两个安装包的作用详细介绍:

qt-x11-opensource-src-4.5.0.tar.gz这个包是针对linux系统的以x11(关于x11相关的知识可以到网上搜一下)为基础的图形系统的一个qt的图形库的源文件。编译后生成一个关于x86的基于x11架构的图形库。即,用这个库的qt函数编出来的程序是能直接在你的red hat 9.0上跑的。

qt-embedded-linux-opensource-src-4.5.0.tar.gz这个库是针对于嵌入式产品的qt库。如果你用x86的编译器编译出来的库就是针对嵌入式的产品(x86架构的产品)。你用这个库编程,编译出的程序能直接在x86的嵌入式产品上跑。

如果你用其他板子的编译器(即交叉编译的话)。编译出的也是针对嵌入式产品的。只不过这个嵌入式的架构是你的板子的相应的库。

好了,先简单的介绍到这里,一会在实际操作中再具体详细阐述。

二:安装包的具体安装方法:

现在对安装qt前的环境要说明一下:red hat 9.0 最好是安装了所有的安装包,因为这样在安装qt环境时才能少出错误。

在这里我们只是说明安装的步骤和出现问题的解决方法。具体linux的命令这里就不一一敲出来了。

㈠把这两个安装包解压,然后把他们分别名成你认为你好理解的名字。

我这里以我电脑上的名字吧:

qt-x11 (代表qt-x11-opensource-src-4.5.0.tar.gz这个解压后的文件夹)

qt-embedded-x11(代表qt-embedded-linux-opensource-src-4.5.0.tar.gz这个解压后的文件夹,要编译成在x86嵌入式的库)

qt-embedded-arm(代表qt-embedded-linux-opensource-src-4.5.0.tar.gz这个解压后的文件夹。要编译成arm(因为我用的是arm板子)板子的库)

这里,qt-embedded有两个复制:qt-embedded-x11 和qt-embedded-arm,根据他们的名字可以知道前者是适合x架构的,后者适合arm架构为什么需要两个呢?如果有开发板的话,可以只编译qt-embedded版本成arm架构的就可以了,但是很多时候用qvfb的话,开发会方便很多,所以多编译一个x86架构的也不错。这里是否有些疑问,qt-x11也是适合x86结构的,这不是和qt-embedded重复了吗?答案是这样的,qt-embedded版本只能在嵌入式板子上面运行,编译成x86架构的程序也只能在x86的嵌入式板子上跑。前面说过,我们需要qvfb来开发,但是qvfb只能执行x86架构的应用程序,所以需要让qt-embedded生成关于x86的库和其他文件。而将qt-embedded编译成arm,又是为什么呢?道理很简单,我最终的qt应用程序需要在arm架构上面运行,当然需要这方面的库,所以编译成arm也就顺理成章了。好了,现在简单的总结一下,首先,使用qt-x11提供的库和开发工具开发出qt应用程序,然后使用qt-embedded关于x86库和工具再次编译我们开发qt应用程序,这是所得到的可执行文件就可以在qvfb上运行了,最后,使用qt-embeddedd的arm库再次编译就可以得到在arm上能运行的可执行程序。很明显,如果有开发板,第二步是可要可不要的(最好是要),如果没有开发板的话,第三步也就没必要了,这样就不需要将qt-embedded编译成适合arm架构的。

㈡ 进入qt-x11目录

./configure (当然你可以用 –profix选项来选定安装路径,如果不指定默认安装在/usr/local/Trolltech/Qt-4.5.0)

Make

Make install

编译过程中可能出现的问题和解决办法:

① krb5.h(或者krb1.h): No such file or directory(原因及解决方法)

原因:安装QT/Embedded4.4.3中,出现上述错误. 这是因为 Red Hat Linux 的 krb5-devel 套件把 kerberos 的 include file 放到了 /usr/kerberos/include 里面,而不是一般位置的 /usr/include 这个目录。而 openssl 支持 kerberos,因此在 compile 使用到 openssl 的程式就很容易发生找不到 kerberos 的 include file 的错误。

解决办法:解決的办法相当简单,首先当然要确定 krb5-devel 以及 krb5-libs 等套件确实有安裝在系统上,而不是根本没安裝;接下來,建立以下的 symbolic links:

ln -s /usr/kerberos/include/com_err.h /usr/include/

ln -s /usr/kerberos/include/profile.h /usr/include/

ln -s /usr/kerberos/include/krb5.h /usr/include

②关于text/qfontengine_ft_p.h这个文件的相关错误。

处理办法:把相关出错的代码行数注释掉即可。至于具体的错误,我没有具体研究。(大家有明白的请赐教)但编译后库可以正常使用。

㈢进入qt-embedded-x86 目录

用 configure 配置

./configure -embedded x86 –qvfb(当然你也可以用—prefix来指定安装路径)

如果不指定默认安装在 /usr/local/Trolltech/QtEmbedded-4.5.0-x86

Make

Make install

其中-embedded x86是针对平台的配置选项(很明显这次是针对x86平台的)–qvfb 选项用来设置支持qvfb

此过程中一般不会出现什么问题,如果出现问题就是上面说的关于text/qfontengine_ft_p.h的问题。解决方法如上所述。

㈣进入qt-embedded-arm目录

./configure -embedded arm(当然你也可以用—prefix来指定安装路径)

Make

Make install

在用config配置时如果提示找不到编译器。是因为编译这个库需要交叉编译器(我的机器上用的是arm-linux-gcc)【关于这个编译器的安装十分简单,我们这里就不在说明了】

其他应该无编译错误。

好了,到目前为止。我们已经安装完了上面所说的三个环境下的库文件。

哎,对了,到这里还记得我们前面说过的qvfb这个工具吧。我们还没有编译那。

编译方法:

cd qt-x11

  cd /tools/qvfb

make

编译好后会在qt-x11/bin目录里生成一个qvfb的工具。然后把它copy到 qt-embedded-x86/bin一份。有人问为什么要copy一份那。是这样的,我们的qvfb工具是qt-x11产生的。但我们用qvfb时是在qt-embedded-x86的环境下使用。因为只有在这个环境下才需要模拟嵌入式运行的情况。(这个问题我们前面说的已经很清楚了)

好,到这里为止。我们已经安装好了这三种环境。下面我们来设置环境变量。

我们的防方案是这样的:

为每一种方案设置一个shell脚本。你想使用哪种环境你就执行相应的那个shell文件。

文件内容如下

Qt-x11.sh(qt-x11环境的)

PATH=/usr/local/qt-x11/bin:$PATH

LD_LIBRARY_PATH=/usr/local/ qt-x11/lib:$LD_LIBRARY_PATH

Export PATH LD_LIBRARY_PATH

Qt-embedded-x86.sh(qt-embedded-x86环境的)

QTEDIR=/usr/local/qt-embedded-x86

PATH=/usr/local/ qt-embedded-x86/bin:$PATH

LD_LIBRARY_PATH=/usr/local/qt-embedded-x86/lib:$LD_LIBRARY_PATH

Export QTEDIR PATH LD_LIBRARY_PATH

Qt-embedded-arm.sh(qt-embedded-arm环境的)

QTEDIR=/usr/local/qt-embedded-arm

PATH=/usr/local/qt-embedded-arm/bin:$PATH

LD_LIBRARY_PATH=/usr/local/qt-embedded-arm/lib:$LD_LIBRARY_PATH

Export QTEDIR PATH LD_LIBRARY_PATH

好了,这样你的qt4的环境算是搭建好了。

比如你想使用designer 。你就首先用source 或者 . 命令来加载环境变量。

如:. Qt-x11.sh 然后你就可以使用qt4的designer了 。

你想使用frame buffer 模拟嵌入式产品。那么你就加载Qt-embedded-x86.sh 。

呵呵,方便吧。

好了,就先写到这吧。关于,做出来的程序的具体移植方案。有空再写。

本人也是刚开始接触嵌入式开发。有什么说的不对的地方,请大家指教。互相学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐