Qte开发环境的搭建

2019-07-12 23:28发布

1. 硬件环境
A. 主机:x86系列PC机。
B. 开发板:YC2440。
2. 软件环境
A. 主机操作系统:VMware5.5虚拟机下的Redhat9(完全安装)
 (RedHat企业版的可能不用安装e2fsprogs-1.35.tar.gz和jpegsrc.v6b.tar.gz)
B. 开发板操作系统:嵌入式Linux,内核版本为2.6.13。
C. 交叉编译器:arm-linux-gcc-2.95.3(位置:/usr/local/arm/2.95.3)   3. 相关说明
A. 命令:所有以#开头的均为在shell中执行的命令。
B. 脚本注释:均放在命令下一行的圆括号内。
4. 准备源码包
A tmake 1.11 或更高版本(生成Qt/Embedded应用工程的Makefile文件)
B Qt/Embedded 2.3.7 (Qt/Embedded 安装包)
C Qt 2.3.2 for X11; (Qt的X11版的安装包, 它将产生x11开发环境所需要的两个工具)
D qtopia-free-1.7.0.tar.gz(可以生成一个Qt的PDA程序)
E e2fsprogs-1.35.tar.gz (用于编译生成libuuid库,RedHat9下必须安装)
F jpegsrc.v6b.tar.gz   5. 编译前准备 A. 建立工作目录
#mkdir /root/qt
#cd /root/qt
#mkdir x86-qt
    (仿真开发目录)
#mkdir arm-qt
    (交叉编译目录)
#cp …
    (复制所有源码包到此目录)
B. 解压源码包
#cd /root/qt/
#tar zxvf tmake-1.1.1.tar.gz –C x86-qt
#tar zxvf tmake-1.1.1.tar.gz –C arm-qt
#tar zxvf qt-x11-2.3.2.tar.gz –C x86-qt
#tar zxvf qt-x11-2.3.2.tar.gz –C arm-qt
#tar zxvf qt-embedded-2.3.7.tar.gz –C x86-qt
#tar zxvf qt-embedded-2.3.7.tar.gz –C arm-qt
#tar zxvf qtopia-free-1.7.0.tar.gz –C x86-qt
#tar zxvf qtopia-free-1.7.0.tar.gz –C arm-qt
    (解压源码包分别到两个目录)
#cd x86-qt
#mv tmake-1.1.1 tmake
#mv qt-x11-2.3.2 qt-x11
#mv qt-embedded-2.3.7 qt
#mv qtopia-free-1.7.0 qtopia
#cd ../arm-qt
#mv tmake-1.1.1 tmake
#mv qt-x11-2.3.2 qt-x11
#mv qt-embedded-2.3.7 qt
#mv qtopia-free-1.7.0 qtopia
    (为了方便,给目录改名)   一、搭建Qt/Embedded仿真开发环境   1. tmake
 cd x11-qt
 export TMAKEDIR=$PWD/tmake
 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
 export PATH=$TMAKEDIR/bin:$PATH
(只用注册好tmake的环境变量皆可使用)
2. 安装Qt/X11 cd qt-x11
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(设置环境变量)
#./configure -no-xft -thread -gif -system-jpeg -sm -shared 
(配置,回答yes)
#make –C src/moc
#cp src/moc/moc bin
(编译并复制moc工具到bin目录)
#make –C src
(编译Qt/X11库)
#make –C tools/designer
(编译Designer,用于可视化界面设计)
#cp tools/designer/designer bin
(会提示略目录,这是正常) #make –C tools/qvfb
#cp tools/qvfb/qvfb bin
#cp bin/uic ../qt/bin
(编译qvfb,用于在PC机上仿真Qt程序)
3. 编译Qt/Embedded #cd qt
#export QTDIR=$PWD
#export QTEDIR=$QTDIR
#export PATH=$QTDIR/bin:$PATH
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(设置环境变量)   在qt/src/tools下缺少一个qconfig-local.h,自己建立一个,文件内容如下:
******************************************************************************************
#ifndef QT_H
#endif // QT_H   // Note that disabling more features will produce a libqte that is not
// compatible with other libqte builds.   #ifndef QT_DLL
#define QT_DLL // Internal
#endif   #define QT_QWS_IPAQ
// Platforms where mouse cursor is never required.
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_SL5XXX)
# define QT_NO_QWS_CURSOR
# define QT_NO_QWS_MOUSE_AUTO
#endif
*******************************************************************************************   #./configure -shared -qconfig local -qvfb -depths 4,8,16,32 -gif -system-jpeg
(配置Qt/Embedded图形库,然后回答yes)   #make(make –C src)
(编译Qt/Embedded)
4、安装e2fsprogs   # cd e2fsprogs
# ./configure –enable-elf-shlibs
# make   # make install lib/uuid
(其中lib目录下的libuuid.so.1.2、libuuid.so.1、libuuid.so即是我们要编译的库,必须检查是否出现以及相应格式,否则说明编译不成功)   将e2fsprogs/lib/目录下uuid的文件夹复制到qtopia/include下。
将e2fsprogs/lib/中的libuuid.a复制到/qtopia/lib下。   否则会出现找不到uuid.h和cannot find -lqtopia的问题,这是因为RedHat 9中缺少uuid.h文件。   //有人说在装e2fsprogs之前需要设置链接器路径(不用):   // export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATH  
5. 编译Qtopia
cd qtopia export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QPEDIR/bin:$PATH
(设置环境变量)
cd src
./configure -platform linux-generic-g++
(如上所写,或不带参数,不能写成configure –platform linux-x86-g++,否则编译时出错。请各位大侠指教!)
make
(编译)
5. 编写环境变量脚本   脚本内容如下,在/opt/x86 -qt/下保存为set-env,在编译或者运行Qt程序之前进入该目录执行此脚本。
export QTDIR=$PWD/qt
export QTXDIR=$PWD/qt-x11
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$QTXDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$QTXDIR/lib:$LD_LIBRARY_PATH     二、交叉编译Qt/Embedded图形库
首先要确保我们安装好了交叉编译器arm-linux-gcc,可以使用如下命令测试:
#which arm-linux-gcc
    (如果所显示的arm-linux-gcc的版本和路径与你所安装的一致,那么就可以用它来交叉编译Qt库和应用程序了)  
1. 安装tmake
进入tmake-1.11目录 cd  /root/arm-qt
 export TMAKEDIR=$PWD/tmake-1.11
 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
 export PATH=$TMAKEDIR/bin:$PATH
(只用注册好tmake的环境变量皆可使用)
2. 安装Qt/X11 可以不重装,直接将x86-qt下的qt-x11拷贝过来
#cp bin/uic ../qt/bin
(编译qvfb,用于在PC机上仿真Qt程序)   3. 安装jpegsrc.v6b.tar.gz   配置
./configure --enable-shared --enable-static --prefix=/usr/local/arm/3.4.5/arm-linux --build=i386 --host=arm
然后修改生成的
gedit Makefile   cc =gcc 改为CC=arm-linux-gcc   AR=ar rc 改为AR=arm-linux-ar rc   AR2=ranlib 改为AR2=arm-linux-ranlib
make
make install-lib   安装时如果错误提示:     /usr/bin/install: 无法创建一般文件‘/usr/local/jpeg6/lib/libjpeg.a’: 没有那个文件或目录     创建如下文件夹:     # mkdir /usr/local/jpeg6/lib     # make install-lib
    如果还有类似的错误,继续创建文件夹,再make install-lib     好了,直到安装成功!
4. 编译Qt/Embedded #cd qt
#export QTDIR=$PWD
#export QTEDIR=$QTDIR
#export PATH=$QTDIR/bin:$PATH
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
(设置环境变量)   同样将qconfig-local.h 拷到/qt/src/tools下   #./configure -xplatform linux-arm-g++ -shared -qconfig local -qvfb -depths 4,8,16,32 -gif -system-jpeg
(配置Qt/Embedded图形库,然后回答yes)
#make
(编译Qt/Embedded)  
5、安装e2fsprogs 将../x86-qt/e2fsprogs/lib/目录下uuid的文件夹复制到qtopia/include下。
将../x86-qt/e2fsprogs/lib/中的libuuid.a复制到/qtopia/lib下。
6. 编译Qtopia
cd qtopia export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QPEDIR/bin:$PATH
(设置环境变量)
cd src
./configure -platform linux-arm-g++
make
(编译)
7. 编写环境变量脚本 脚本内容如下,在/opt/x86 -qt/下保存为set-env,在编译或者运行Qt程序之前进入该目录执行此脚本。
export QTDIR=$PWD/qt
export QTXDIR=$PWD/qt-x11
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$QTXDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$QTXDIR/lib:$LD_LIBRARY_PATH     三、 仿真Qt/Embedded应用程序
1. 注册环境变量 #cd/root/qt/x86-qt
#source set-env
    (或者#. set-env,.和set-env之间有一个空格)
#mkdir hello
#cd hello  
2. 设计界面 使用Qt/X11的可视化界面设计工具Qt Designer设计界面。
#designer hello.ui
然后设计好界面,保存并退出。  
3. 生成界面代码 使用Qt的代码自动生成工具uic把设计好的界面hello.ui生成相应的c++代码:hello.h和hello.cpp。
        #uic -o hello.h hello.ui
        #uic -o hello.cpp -impl hello.h hello.ui
生成的源文件中把我们设计好的界面定义为一个类,在我们的程序中使用这个类创建对象,并设为主控件就可以了。  
4. 编写代码 #vi main.cpp
    (编辑main.cpp,内容如下)
#include
#include"hello.h"
//包含我们设计的界面MainWindow类的声明   int main(int argc,char **argv)
{
QApplication app(argc,argv);
MainWindow *mainwindow=new MainWindow(0,"MainWindow");
//实例化MainWindow,MainWindow为在使用Designer设计界面时给主窗口的名称。   app.setMainWidget(mainwindow);
//把mainwindow设定为程序的主控件,在程序执行时就可以显示这个控件。   mainwindow->show();
//显示mainwindow,这样就为我们的界面显示做好准备了。   return app.exec();
}
5. 建立工程 可以使用tmake中的progen工具产生一个工程模板,然后自己修改。也可以自己写工程文件,个人觉得这样方便,下面我们就自己写一个吧!
#vi hello.pro
    (编辑内容如下)
TEMPLATE=app
#表明这是一个应用程序
CONFIG+=qtopia warn_on release
#qtopia:生成qtopia应用程序,warn_on:所有的警告全部打开,release:不带调试信息
SOURCES=main.cpp hello.cpp
#指明工程中包含的源程序
HEADERS=hello.h
#指明源程序中包含的头文件
TARGET=hello
#生成的程序名为hello   6. 编译并仿真运行程序 #tmake -o Makefile panel.pro
#make
    (这样就会在当前目录下生成hello可执行文件)
#qvfb &
    (执行Qt虚拟缓冲帧,用于仿真)
#./hello –qws
    (运行编译好的程序,在qvfb上就可以看到我们设计的界面了)   五、 交叉编译程序
#cd /root/qt/arm-qt
#. set-env
#cd hello
#tmake -o Makefile panel.pro
#make
    (把生成的hello下载到带有Qt/Embedded图形库的开发板上执行即可)