Bootstrap

Qt/Embedded嵌入式开发环境的建立

一.             开发环境
(1)        Red Hat Enterprise Linux 5
(2)        Linux Kernel 2.6.18
(3)        (Qt开发包)  qt-x11-2.3.2.tar.gz
(4)        (Qt/Embedded开发包) qt-embedded-2.3.10-free.tar.gz
(5)        (自动创建Makefile文件的工具) tmake-1.13.tar.gz
(6)        编译器 gcc-4.1.2
二.             解压安装包并设置环境变量
(如下均假设在/root/qte目录下进行)
(1)        安装tmake:
#cd ~/qte
#tar zxvf tmake-1.13.tar.gz
#export TMAKEDIR=$PWD/tmake-1.13
(2)        安装qt:
#cd ~/qte
#tar zxvf qt-x11-2.3.2.tar.gz
#export QT2DIR=$PWD/qt-2.3.2
(3)        安装qte:
#cd ~/qte
#tar zxvf qt-embedded-2.3.10-free.tar.gz
#export QTEDIR=$PWD/qt-2.3.10
三.             编译Qt 和Qt/Embedded
(1)       编译Qt:
#cd $QT2DIR
//设置环境变量
#export TMAKEPATH=$TMAKEDIR/lib/linux-g++
#export QTDIR=$QT2DIR
#export PATH=$QTDIR/bin:$PATH
//将Qt库加入到系统共享库中
#ldconfig $QTDIR/lib
//开始编译
#make clean
//configure命令对Qt进行编译设置,其包含很多选项,可通过./configure –help
//来获取详细的帮助信息。
#./configure -no-xft –system-jpeg
#make
//将uic工具复制到Qt/Embedded目录中,可覆盖原文件
#cp bin/uic $QTEDIR/bin/

在我执行“make命令的时候”,老是出现问题,编译不成功,气死人了。
后来我又看到了一篇博文关于如何解决编译出现的问题,而其中的一些问题恰好遇到,顿时泪流满面啊!
按照所说,修改以后,执行make命令就可以编译成功了。
这是我编译的时候遇到的问题和解决方案:

编译过程出现错误:

error 1


/root/2410clQt/qt-2.3.2/include/qvaluestack.h:57: 错误:不能将‘int remove(const char*)’的实参‘1’从‘QValueListIterator<QMap<QString, QString> >’转换到‘const char*’
/root/2410clQt/qt-2.3.2/include/qvaluestack.h: In member function ‘T QValueStack<T>::pop() [with T = QString]’:
xml/qxml.cpp:2502:   instantiated from here
/root/2410clQt/qt-2.3.2/include/qvaluestack.h:57: 错误:不能将‘int remove(const char*)’的实参‘1’从‘QValueListIterator<QString>’转换到‘const char*’
make[2]: *** [xml/qxml.o] 错误 1
make[2]: Leaving directory `/root/2410clQt/qt-2.3.2/src'
make[1]: *** [sub-src] 错误 2
make[1]: Leaving directory `/root/2410clQt/qt-2.3.2'
make: *** [init] 错误 2


solving :

gedit $QTDIR/include/qvaluestack.h &

将remove( this->fromLast() );改为this->remove( this->fromLast() );


在我看到的这篇文章里,还有其他问题的解决方案,也许大家会遇到,我将链接放在这里。

http://blog.csdn.net/ggbondg/article/details/4188436



uic工具要qt-x11编译成功以后才会在bin目录下出现,开始因为我没有编译成功,没有uic这个工具,老是百度都没有,而后面编译的时候老时说没有“uic”这个命令。

(2)       编译qvfb:
//qvfb工具用来生成Virtual Frame Buffer,它可以模拟在嵌入式开发板上的显示
//状况,如果在qvfb中模拟运行没有问题的话,就可以直接通过交叉编译在
//开发板上运行了。
#cd $QTEDIR/tools/qvfb
//设置环境变量
#export PATH=$TMAKEPATH/bin:$PATH
#make clean
//用tmake自动创建Makefile文件
#tmake -o Makefile qvfb.pro
//开始编译
#make
//将qvfb工具复制到Qt/Embedded目录中,可覆盖原文件
#cp qvfb $QTEDIR/bin
(3)       编译Qt/Embedded:
#cd $QTEDIR
//设置环境变量
#export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
#export QTDIR=$QTEDIR
#export PATH=$QTDIR/bin:$PATH
//将Qt/Embedded库加入到系统共享库中
#ldconfig $QTDIR/lib
#make clean
//开始编译
//configure中的选项-qvfb用来对Virtual Frame Buffer进行支持,-depths用来
//支持4位、8位、16位、32位的显示深度
#./configure -no-xft –system-jpeg -qvfb -depths 4,8,16,32
#make

这里我进行编译的时候,同样遇到了问题,但是根据上面我看到的这篇博文,还是从中找到了答案!
再次感谢他们的文章。
这是我执行编译的时候遇到的问题。

error3
/zylinux/x86-qtopia/qt-2.3.7/include/qwindowsystem_qws.h:229: 错误:‘QWSInputMethod’未声明

gedit qwindowsystem_qws.h

在前面增加以下一行

class QWSInputMethod;

error5
qvaluestack.h:57: 错误:不能将‘int remove(const char*)’的实参‘1’从‘QValueListIterator<QString>’转换到‘const char*’
与error1同解

参照文档中的解决方法都可以解决。

四.             建立开发环境的初始变量
#vi ~/.bashrc
export TMAKEDIR=~/qte/tmake-1.13
export QT2DIR=~/qte/qt-2.3.2
export QTEDIR=~/qte/qt-2.3.10
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$TMAKEPATH/bin:$PATH
五.             设置Qt/Embedded 开发的共享库
//通过在ld.so.conf文件中加入开发库的绝对路径,将开发库设置成Linux
//共享库,以后就可以直接在项目源代码中使用include预编译指令加载
//Qt和Qt/Embedded开发库中的类了。
#vi /etc/ld.so.conf
       /root/qte/qt-2.3.2/lib
       /root/qte/qt-2.3.10/lib
六.             测试Virtual Frame Buffer
#cd $QTEDIR/examples/launcher
#qvfb -width 640 -height 480 &
#sleep 10
#./launcher –qws
最后我终于成功了,一天了,终于成功了不容易啊!
左问度娘,右问度娘。
问题终于解决了。

我不得不承认一个事实,问度娘也是有技巧的。
有时当我们想找一个答案的时候,这样问没有答案,那样问却有,而自己感觉两个问题意思差不多啊!
呵呵!!!

这是我参考的文章:
http://blog.csdn.net/do2jiang/article/details/5169193
;