本文介绍的是Qt移植学习之路 QT4.5.3至mini2440,终于成功移植QT 4.5.3至mini2440,并能运行QT自带的应用程序,总得来说还算很顺利,下面是我移植的全部过程。
首先,我交待一下我的开发环境:
宿主机:Fedora9
主机Gcc:gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
交叉编译器:arm-linux-gcc-4.3.2 (友善光盘自带)
开发板:mini2440(NAND 128M SDRAM 64M)
移植步骤:
1.准备源码包
从ftp://ftp.qt.nokia.com/qt/source/ 下载:qt-embedded-linux-opensource-src-4.5.3.tar.gz和
qt-x11-opensource-src-4.5.3.tar.gz
前者是移植到开发板上运行的,后者是方便在X86机上开发应用程序,待一切调试成功再经交叉编译后下载到开发板上运行。
从网上下载tslib-1.4.tar.gz包,这包用于管理触摸屏,例如可用于它来校正触摸屏,并保存校正数据。
2.编译安装tslib-1.4
把tslib-1.4 COPY到Fedora9的 /opt下,在Fedora9的终端下执行:
- #cd /tmp
- # tar zxvf tslib-1.4.tar.gz ――――――――(最后在/tmp下解压生成tslib)
- #cd tslib
- #./autogen.sh
- #./configure --prefix=/home/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
- #make
- #make install
成功后可在/home下生成mytslib,进入mytslib可以看到有bin include lib etc四个文件夹。我们暂时先不理它,在接下来的移植过程中才用到这些文件夹。
3. 编译安装QT-X11-4.5.3
QT-X11-4.5.3是运行于linux平台下用于仿真QT应用程序的软件,这样你便可以在linux平台下把你应用程序都调试好,然后再利用QT4.5.3把应用程序编译成ARM版本下载至开发板,这样你就可以在开发板上运行你的QT应用程序了。
下面是安装步骤:
首先把qt-x11-opensource-src-4.5.3.tar.gz 拷贝到Fedora9下的/tmp目录下,接着执行:
- #tar zxvf qt-x11-opensource-src-4.5.3.tar.gz
- #cd qt-x11-opensource-src-4.5.3
- #./configure
- #gmake //一般用时2-3小时,如果你的机子配置不太低的情况下
- #gmake install
安装OK后,在/usr/local/目录下生成Trolltech目录,这就是我们要用于在x86平台(Fedora9)下开发应用程序时所依赖的一些目录。现在你可以进入/usr/local/Trolltech/Qt-4.5.3/examples下,进入一个例子,比如进入/usr/local/Trolltech/Qt-4.5.3/examples/widgets/analogclock下,你会发现,这个例子都已经编译好了,在Fedora9的终端下直接运行:
- #./analogclock –qvfb
则在Fedora9的屏幕上出现下图:
也许你会想,我是否能重新编译一遍analogclock呢?因为analogclock目录下有一个Makefile,于是执行:
- #make clean
- #qmake –project
唉,你会发现,提示说找不到命令“qmake”,怎么办呢?很简单,因为我们还没有设置环境变量,当然会找不到命令啦。
让我们来设置一下QT-X11-4.5.3的环境变量,首先进入你的安装QT-x11-4.5.3目录:
- #cd /opt/qt-x11-opensource-src-4.5.3
在此目录下建立一个名为:qt_x11_setenv.sh的shell文件,内容如下:
- #!bin/bash
- PATH=/usr/local/Trolltech/Qt-4.5.3/bin:$PATH
- QTDIR=/usr/local/Trolltech/QT-4.5.3
- MAINPATH=$QTDIR/man:$MAINPATH
- LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- export PATH QTDIR MAINPATH LD_LIBRARY_PATH
- echo " set qt-x11 env. successful "
保存退出,在终端执行:
- #source qt_x11_setenv.sh
终端回显:set qt-x11 env. successful
- #echo $QTDIR
终端回显:/usr/local/Trolltech/QT-4.5.3 ――――――说明:环境变量设置成功。
在这之后,我们再执行一下:
- #qmake –project (建立*.pro文件)
- #qmake (产生Makefile文件)
- #make (编译产生可执行程序)
如果没有错误将生成analogclock可执行程序,终端执行:
- #./analogclock –qvfb
看看是否出现画面了~~~~~~~~~~
注意一点:
在每次进入qt-x11-linux-opensource-src-4.5.3目录中要 #source setenv-x11.sh
把环境变量设置好,否则又会出现无法编译。
成功后,是不是有点迫不及待地想自己试验一个QT程序呢,让我们来编写一个hello程序吧!
- #cd qt-x11-linux-opensource-src-4.5.3/ /opt/qt-x11-opensource-src-4.5.3/examples/
- #mkdir hello
- #vi hello.cpp
然后把下列源程序COPY到hello.cpp中。
- #include <QApplication>
- nclude <QPushButton>
- int main(int argc, char *argv[])
- {
- QApplication app(argc,argv);
- QPushButton b("Hello World !");
- b.show();
- QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit()));
- return app.exec();
- }
进入前记得执行source setenv-x11.sh
- # qmake –project (产生hello.pro文件)
- #qmake (产生Makefile文件)
- #make (执行Makefile以生成可执行程序)
如果不出错在当前目录下生成hello可执行程序,既然生成了,那还等什么,执行吧。
- #./hello –qvfb
我执行后就出图了,你的呢?
其实图是可以拉大的,你试试!
4.编译安装QT4.5.3
首先我们建立两个目录用来存放接下来编译出来的一些目标文件,在Fedora9的根目录下建立mini2440 和 tslib两个目录,终端执行:
- #cd /
- #mkdir mini2440
- #mkdir tslib
接下来我们把qt-embedded-linux-opensource-src-4.5.3.tar.gz COPY到/tmp下, 终端执行:
- #cd /tmp
- #tar zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
- #cd qt-embedded-linux-opensource-src-4.5.3
- #./configure -prefix /mini2440 -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg
- -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis
- -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info
- -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb
- -confirm-license -qt-mouse-tslib -I/home/mytslib/include -L/home/mytslib/lib
上面最后一句“-I/home/mytslib/include -L/home/ mytslib/lib ”指明我们刚才编译出来触摸屏的库文件及头文件存放路径。它前面的“-qt-mouse-tslib”表示将使用触摸屏。
然后执行:
- #gmake
- #gmake install
上面编译时间较长,一般要2到3个小时。
这样,嵌入式版本的qt4装成功了,若想进行交叉编译,首先也得改变环境变量,所以也可以在当前目录下建一个环境变量的文件setenv-embedded.sh 如下:
- #gedit setenv-embedded.sh
这时跳出一个编辑文本输入:
- PATH=/mini2440/bin:$PATH
- QTDIR=/mini2440
- MAINPATH=$QTDIR/man:$MAINPATH
- LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- export PATH QTDIR MAINPATH LD_LIBRARY_PATH
保存退出。每次进行qt4-embedded的交叉编译前先# source setenv-embedded.sh,注意我们在编译QT应用程序时要用到上述变量。下文会提到。