QTE2.3.10、QTX11-2.3.2、TMAKE-1.13install及问题总结

来源:互联网 发布:淘宝汽车服务在哪里 编辑:程序博客网 时间:2024/06/05 17:01

 环境:red hat enterprise linux 5(虚拟机)

 

 

Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded的免费版本,安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410cl/gui/Qt/src下。在做实验前把本次实验用到的三个文件拷贝到/root/2410clQt目录下。

 

[root@BC root]#cd /root/

[root@BC root]#mkdir 2410clQt

[root@BC root]#cd /arm2410cl/gui/Qt/src

[root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz

qt-x11-2.3.2.tar.gz /root/2410clQt

 

安装编译器arm-linux-gcc-3.4.1

 

[root@BC src]#cd /arm2410cl/gui/Qt/tools

[root@BC tools]#tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C ./

[root@BC tools]#vi /root/.bash_profile //打开文件

 

将该文件中的PATH 变量改为PATH=$PATH:$HOME/bin:/arm2410cl/gui/Qt/tools

/usr/local/arm/3.4.1/bin/,存盘后退出。

[root@BC tools]# source /root/.bash_profile

如果安装正确的话,在任意路径下输入ar后按Tab键即可列出编译器文件。

Qt/Embedded 平台的搭建需要以下几步:

第一步,解压安装包并设置环境变量

1.  安装Tmake

 

cd ~/2410clQt

tar –xzf tmake-1.13.tar.gz

export TMAKEDIR=$PWD/tmake-1.13

 

2. 安装Qt 2.3.2

 

cd ~/2410clQt

tar –xzf qt-x11-2.3.2.tar.gz

export QT2DIR=$PWD/qt-2.3.2

 

3. 安装Qt/Embedded

 

cd ~/2410clQt

tar –xzf qt-embedded-2.3.10-free.tar.gz

export QTEDIR=$PWD/qt-2.3.10

 

环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包,下面介

绍一下这些环境变量:

TMAKEDIR :指向用于编译Qt/EmbeddedTmake工具

QT2DIR :指向qt-2.3.2的文件夹

QTEDIR :指向qt-2.3.10的文件夹

第二步,编译Qt/Embedded

1.  Build Qt2.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 //出现选项时都输入yes

make

cp –arf bin/uic $QTEDIR/bin/

 

./configure是对Qt进行配置,它包括很多选项,例如可以通过添加“-no-opengl”等,

如果想要进一步了解可以通过键入./configure --help来获得更多的帮助信息。编译完成后

需要将生成的bin/uic复制到$QTEDIR下新创建的目录bin 中,因为在随后编译

Qt/Embedded的时候会用到这个工具。

2. Build Qvfb

 

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

export QTDIR=$QT2DIR

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

cd $QTEDIR/tools/qvfb

/root/2410clQt/tmake-1.13/bin/tmake -o Makefile qvfb.pro

Make

mv qvfb $QTEDIR/bin/

 

这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中

qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上

的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开

发板上运行。

3. Build Qt/Embedded

 

cd $QTEDIR

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

yes

5

Make

 

在配置./configure 中-qvfb 用来支持Virtual framebuffer,-depths 4,8,16,32 支持4 位,8

位,16 位,32 位的显示深度,此外还可以添加如-syestem-jpeg 和-gif 来提供对jpeg 和gif

的支持。配置系统同时还支持对特定平台系统选项的添加,但一般来讲,凡是支持

framebuffer 的Linux 系统都可以使用“linux-generic-g++”平台。详细的配置信息可以通过

运行./configure --help 命令来查看。

第四步,查看运行结果,如果上面各步都能够成功的编译通过,下面就可以通过运行

Qt/Embedded 自带的demo 来查看运行结果。

●在Virtual framebuffer 上运行:

 

export QTDIR=$QTEDIR

export PATH=$QTEDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH

cd $QTEDIR/examples/launcher

qvfb -width 640 -height 480 &

sleep 10

./launcher –qws

 

运行结果如下:

 

 

可能遇到的问题:

 

 

Referencehi.baidu.com/lifuxiang/item/1922dd23548de33395f62b7d

qt/qte编译错误总结

注意:1、修改文件时,可能要更改文件权限,变成可写的,因为文件可能设置了只读属性

2、如果出现错误了,最好在重新make之前,先make clean一下。

3注意出错文件的位置,进文件夹修改时别进错了文件夹。


******************1st Error******************************
在包含自 kernel/qpsprinter.cpp97的文件中:
kernel/qt_x11.h:65:22:
错误: X11/Xlib.h:没有该文件或目录

kernel/qt_x11.h:71:23:
错误: X11/Xutil.h:没有该文件或目录
kernel/qt_x11.h:72:21:
错误: X11/Xos.h:没有该文件或目录
kernel/qt_x11.h:73:23:
错误: X11/Xatom.h:没有该文件或目录
kernel/qt_x11.h:84:34:
错误: X11/extensions/shape.h:没有该文件或目录
kernel/qpsprinter.cpp: In constructor ‘QPSPrinterFont::QPSPrinterFont(const QFont&, QPSPrinterPrivate*)’:
kernel/qpsprinter.cpp:5195:
错误: ‘XGetFontPath’在此作用域中尚未声明
kernel/qpsprinter.cpp:5235:
错误: ‘XFreeFontPath’在此作用域中尚未声明
make[3]: *** [kernel/qpsprinter.o]
错误 1
make[3]:
正在离开目录
`/home/qt/qt-x11-2.3.2/src'
make[2]: *** [src-mt]
错误
2
make[2]:
正在离开目录
`/home/qt/qt-x11-2.3.2'
make[1]: *** [src-mt]
错误
2
make[1]:
正在离开目录
`/home/qt/qt-x11-2.3.2'
make: *** [init]
错误
2
-----------------------------------------------------------------
Reason: Need lib just as xlib .etc
---------------------------------------------------------------
Resolution: Install qt4-dev qt4-design
********************************************************

*******************2nd Error****************************
xml/qxml.cpp:1518:
警告:未使用的参数
‘ret’
/home/qt/qt-x11-2.3.2/include/qvaluestack.h: In member function ‘T QValueStack<T>::pop() [with T = QMap<QString, QString>]’:
xml/qxml.cpp:513:   instantiated from here
/home/qt/qt-x11-2.3.2/include/qvaluestack.h:57:
错误:
不能从‘QValueListIterator<QMap<QString, QString> >’转换到‘const char*’,为实参‘1’(属于‘int remove(const char*)’)
/home/qt/qt-x11-2.3.2/include/qvaluestack.h: In member function ‘T QValueStack<T>::pop() [with T = QString]’:
xml/qxml.cpp:2502:   instantiated from here
/home/qt/qt-x11-2.3.2/include/qvaluestack.h:57:
错误:不能从‘QValueListIterator<QString>’转换到‘const char*’,为实参‘1’(属于‘int remove(const char*)’)
make[3]: *** [xml/qxml.o]
错误 1

make[3]:
正在离开目录 `/home/qt/qt-x11-2.3.2/src'
make[2]: *** [src-mt]
错误
2
make[2]:
正在离开目录
`/home/qt/qt-x11-2.3.2'
make[1]: *** [src-mt]
错误
2
make[1]:
正在离开目录
`/home/qt/qt-x11-2.3.2'
make: *** [init]
错误
2
-----------------------------------------------------
Reason:
代码uestack.h:57this未被赋值

-----------------------------------------------------
Resolution:
vim $QTDIR/include/qvaluestack.h &
remove( this->fromLast() );改为this->remove( this->fromLast() );
**********************************************************

***************************3rd Error***********************
在包含自 /usr/include/X11/Xft/Xft.h41的文件中,

                
kernel/qt_x11.h76
                
kernel/qpsprinter.cpp97:
/usr/include/ft2build.h:56:38:
错误: freetype/config/ftheader.h:没有该文件或目录

在包含自 kernel/qt_x11.h76的文件中,
                
kernel/qpsprinter.cpp97:
/usr/include/X11/Xft/Xft.h:42:10:
错误: #include需要 "FILENAME"
<FILENAME>
In file included from kernel/qt_x11.h:76,
                 from kernel/qpsprinter.cpp:97:
/usr/include/X11/Xft/Xft.h:62:
错误: ‘FT_Library’没有命名一个类型

/usr/include/X11/Xft/Xft.h:96:
错误: ‘FT_UInt’没有命名一个类型
/usr/include/X11/Xft/Xft.h:103:
错误: ‘FT_UInt’没有命名一个类型
/usr/include/X11/Xft/Xft.h:200:
错误: expected ‘,’ or ‘...’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:305:
错误:
expected ‘,’ or ‘...’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:363:
错误: ‘FT_Face’没有命名一个类型

/usr/include/X11/Xft/Xft.h:403:
错误: expected ‘,’ or ‘...’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:409:
错误:
expected ‘,’ or ‘...’ before ‘*’ token
/usr/include/X11/Xft/Xft.h:418:
错误: ‘FT_UInt’未声明

/usr/include/X11/Xft/Xft.h:419:
错误: ‘FT_UInt’未声明
/usr/include/X11/Xft/Xft.h:427:
错误: ‘FT_UInt’没有命名一个类型
/usr/include/X11/Xft/Xft.h:461:
错误: expected ‘,’ or ‘...’ before ‘*’ token
kernel/qpsprinter.cpp: In constructor ‘QPSPrinterFont::QPSPrinterFont(const QFont&, QPSPrinterPrivate*)’:
kernel/qpsprinter.cpp:5187:
警告:提领类型双关的指针将破坏强重叠规则

make[2]: *** [kernel/qpsprinter.o]
错误 1
make[2]:
正在离开目录
`/home/qt/qt-x11-2.3.2/src'
make[1]: *** [sub-src]
错误
2
make[1]:
正在离开目录
`/home/qt/qt-x11-2.3.2'
make: *** [init]
错误
2
----------------------------------------------------------
Reason: PATH were not defined
-----------------------------------------------------------
Resolution:
export QTDIR="/home/qt/qt-2.3.2"
export QTEDIR="/home/qte/qte-2.3.2-new"
export PATH="$QTEDIR/bin:$QTDIR/bin:$PATH"
export PATH="$QTEDIR/tmake/bin:$PATH"
export TMAKEPATH="$QTEDIR/tmake/lib/qws/linux-x86-g++"
export LD_LIBRARY_PATH="$QTEDIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH"
export QTDIR=$QTDIR
cd $QTDIR
**************************************************************************

编译通过!!!!


没有遇到的问题,但可能遇到的问题:
一,
‘QWSInputMethod’ has not been declared

修正方法:


cd $QTDIR/src/kernel //$DTDIR=/home/opiehome/qt-2.3.10

gedit qwindowsystem_qws.h

在前面增加以下两行

class QWSInputMethod;

class QWSGestureMethod;

二,
error:
kernel/qpixmapcache.cpp:125:57:
错误:asm/page.h:没有那个文件或目录
In file included from kernel/qgfx_qws.h:39,
                 from kernel/qpixmapcache.cpp:112:
kernel/qimage.h: In member function ‘int QImageTextKeyLang::operator<(const QImageTextKeyLang&) const’:
kernel/qimage.h:58:
警告:建议在 ||的操作数中出现的 &&前后加上括号
kernel/qpixmapcache.cpp: In constructor ‘QSharedMemoryManager::QSharedMemoryManager()’:
kernel/qpixmapcache.cpp:539:
错误:‘PAGE_SIZE’在此作用域中尚未声明
kernel/qpixmapcache.cpp:539:
错误:‘PAGE_MASK’在此作用域中尚未声明
kernel/qpixmapcache.cpp: In member function ‘void QSharedMemoryManager::internal_free(QSMemPtr)’:
kernel/qpixmapcache.cpp:773:
错误:‘PAGE_SIZE’在此作用域中尚未声明
kernel/qpixmapcache.cpp:773:
错误:‘PAGE_MASK’在此作用域中尚未声明
make[2]: *** [kernel/qpixmapcache.o]
错误 1
make[2]: Leaving directory `/root/2410clQt/qt-2.3.10/src'
make[1]: *** [sub-src]
错误
2
make[1]: Leaving directory `/root/2410clQt/qt-2.3.10'
make: *** [init]
错误
2



solving :

[root@localhost 
kernel]# cp /home/john/embedded-system/setup-dir/linux-2.4.21/include/asm-i386/page.h /usr/include/asm/

三,

使用nfs时在cp一些大点的文件时,出现NFS的错误:

nfs: server *** not responding, still trying
修改方法:

nfs mount
时候出现的NFS崩溃,按照以下的方式mount
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.3/root/somedir /host 

 

 

 

原创粉丝点击