QTE2.3.10、QTX11-2.3.2、TMAKE-1.13install及问题总结
环境:red hat enterprise linux 5(虚拟机) 在 Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded的免费版本,安装产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410cl/gui/Qt/src下。在做实验前把本次实验用到的三个文件拷贝到/root/2410clQt目录下。 [root@BC root]#cd /
环境: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/Embedded的Tmake工具
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
运行结果如下:
可能遇到的问题:
Reference:hi.baidu.com/lifuxiang/item/1922dd23548de33395f62b7d
qt/qte编译错误总结
注意:1、修改文件时,可能要更改文件权限,变成可写的,因为文件可能设置了只读属性
2、如果出现错误了,最好在重新make之前,先make clean一下。
3、注意出错文件的位置,进文件夹修改时别进错了文件夹。
******************1st Error******************************
在包含自 kernel/qpsprinter.cpp:97的文件中:
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.h:41的文件中,
从 kernel/qt_x11.h:76,
从 kernel/qpsprinter.cpp:97:
/usr/include/ft2build.h:56:38: 错误: freetype/config/ftheader.h:没有该文件或目录
在包含自 kernel/qt_x11.h:76的文件中,
从 kernel/qpsprinter.cpp:97:
/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
更多推荐
所有评论(0)