2011-8-18移植QT4.5.3至OMAP-L138
终于成功移植QT4.5.3至OMAP-L138,并能运行QT自带的应用程序,总得来说还算很顺利,下面是我移植的全部过程。
首先,我交待一下我的开发环境:
宿主机:Ubuntu
交叉编译器:arm-linux-gcc-4.3.2
开发板:OMAP-L138
移植步骤:
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到Ubuntu的 /opt下,在Ubuntu的终端下执行:
#cd /opt
# tar zxvf tslib-1.4.tar.gz
#cd tslib
#./autogen.sh
备注:
可能出现问题
(1)./autogen.sh: 4: autoreconf: not found
因为没有安装automake 工具,(ubuntu 10.04)用下面的命令安装好就可以了。
解决:
sudo apt-get install autoconf automake libtool
(2)Can't exec "libtoolize": 没有那个文件或目录 at /usr/bin/autoreconf line 190.
Use of uninitialized value $libtoolize in pattern match (m//) at /usr/bin/autoreconf line 190.
configure.ac:9: error: possibly undefined macro: AC_DISABLE_STATIC
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:10: error: possibly undefined macro: AC_PROG_LIBTOOL
autoreconf: /usr/bin/autoconf failed with exit status: 1
解决:
sudo apt-get install libtool
然后继续:
#./configure --prefix=/home/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
#make
#make install
成功后可在/home下生成mytslib,进入mytslib可以看到有bin include lib etc四个文件夹。我们暂时先不理它,在接下来的移植过程中才用到这些文件夹。
完整的编译过程,请参见:http://blog.csdn.net/yf210yf/article/details/6701359
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 拷贝到Ubuntu下的/opt目录下,接着执行:
#tar zxvf qt-x11-opensource-src-4.5.3.tar.gz
#cd qt-x11-opensource-src-4.5.3
#./configure
问题出现了。屏幕上会打印如下信息:
The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
解决方法:
apt-get install libxtst-dev
备注:
Ubuntu Linux下 gmake不能使用
gmake : command not found
gmake的全名应该是GNUmake,
原来在ubuntu中已经取消掉了它,都用make代替。
ubuntu-cn上也有人遇到这个问题,
方法是把Makefile中的gmake全改为make。
解决方案是:
/usr/bin下创建一个符号连接 cd /usr/bin && sudo ln -s make gmake 即可
或
$ sudo ln -s /usr/bin/make /usr/bin/gmake
如果你用的是FC等发行版的话应该没有这个问题的,就不必担心了。
#make //一般用时2-3小时,如果你的机子配置不太低的情况下
#make install
安装OK后,在/usr/local/目录下生成Trolltech目录,这就是我们要用于在x86平台(Ubuntu)下开发应用程序时所依赖的一些目录。现在你可以进入/usr/local/Trolltech/Qt-4.5.3/examples下,进入一个例子,比如进入/usr/local/Trolltech/Qt-4.5.3/examples/widgets/analogclock下,你会发现,这个例子都已经编译好了,在Ubuntu的终端下直接运行:
#./analogclock –qvfb
则在Ubuntu的屏幕上出现下图:
也许你会想,我是否能重新编译一遍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>
#include <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以生成可执行程序)
可能出现问题:
error: stray '\302' in program
error: stray '\204' in program
这是什么错???怎么解决??
这个错误一般是源代码中含有一些隐藏的非ascii字符。你把东西copy到文本编辑器中,再copy回来试试
如果不出错在当前目录下生成hello可执行程序,既然生成了,那还等什么,执行吧。
#./hello –qvfb
我执行后就出图了,你的呢?
其实图是可以拉大的,你试试!