平台:fedora(完全安装版)完全安装在后面的编译过程中才会很少因为确实库而出问题。
编译器:mini自带的 4.3.2
开发板:mini2440(nand128M)
第一步:准备源码包
从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
第二步: 编译安装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下的/home目录下
注意:编译安装QT的过程中最长出现的问题,就是硬盘上没有多余的空间了。编译安装完qt大概需要10~20G的虚拟机空间。所以在创建虚拟机的时候,把/ 目录分为10G,/home 目录分为15G,这样就可以避免这个问题。
接着执行
- #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的屏幕上出现下图:
接着设置一下QT-X11-4.5.3的环境变量。
注意2:这里很重要,因为如果你的环境变量设置的有问题的话,会发生很多莫名其妙的错误。
由于我们的fedora9.0 是完全安装的所有,在系统里是装有一个qt-3.3的,由于环境变量的优先级使得我们后面设置的环境变量没有起到作用,
所以环境变量设置方法如下。
在/etc/profile中添加如下信息
export QTDIR=/usr/local/Trolltech/Qt-4.5.3/
export QTINC=/usr/local/Trolltech/Qt-4.5.3/include/
export QTLIB=/usr/local/Trolltech/Qt-4.5.3/lib
export QTINC=/usr/local/Trolltech/Qt-4.5.3/include
export PATH=:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/4.3.2/bin:/usr/local/Trolltech/Qt-4.5.3/bin:/usr/local/Trolltech/Qt-4.5.3/mkspecs:/root/bin
保存退出,在终端执行:
- #source /etc/profile
- #echo $QTDIR
终端回显:/usr/local/Trolltech/QT-4.5.3 ――――――说明:环境变量设置成功
接着我们自己编写一个最简单的QT程序,hello world
- #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();
}
- # qmake –project (产生hello.pro文件)
- #qmake (产生Makefile文件)
- #make (执行Makefile以生成可执行程序)
接着就会出现下面这张图片
第三步:编译安装QT4.5.3
首先我们建立两个目录用来存放接下来编译出来的一些目标文件,在Fedora9的根目录下建立mini2440 和 tslib两个目录,终端执行:
- #cd /
- #mkdir mini2440
- #mkdir tslib
接下来我们把qt-embedded-linux-opensource-src-4.5.3.tar.gz COPY到/home下, 终端执行:
- #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应用程序时要用到上述变量。下文会提到。
第四步:移植相关库文件至开发板
由于我们在/mini2440中生成的lib库比较大,即使是用nfs挂载的方式copy进去,依旧比较慢(也会发生not responsing的问题)那么我们自己在制作文件系统的时候就可以直接把我们需要的库文件制作进去。
首先在rootfs 的根目录下建立两个目录:
- #mkdir mini2440
- #mkdir tslib
接着
- #cp –rf /home/mytslib/lib 你制作的文件系统/tslib/
- #cp –rf /home/mytslib/etc 你制作的文件系统/tslib/
- #cp –rf /mini2440/lib 你制作的文件系统/mini2440/
- #cp /home/mytslib/bin/ts_calibrate 你制作的文件系统/bin
- #cp /home/mytslib/bin/ts_test 你制作的文件系统/bin
接着修改你制作的文件系统的/etc/profile
添加一下环境变量:
- export QTDIR=/mini2440
- export T_ROOT=/tslib
- export PATH=$QTDIR/bin:$PATH
- export TSLIB_CONSOLEDEVICE=none
- export TSLIB_FBDEVICE=/dev/fb0
- export TSLIB_TSDEVICE=/dev/event0
- export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
- export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
- export TSLIB_CALIBFILE=/etc/pointercal
- export QWS_MOUSE_PROTO=tslib:/dev/event0
- export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
制作完文件系统后,下载进开发板,
验证变量设置是否成功:
在开发板终端下执行:
#echo $QTDIR 如果显示 #/mini2440,则说明设置成功了,在QT的移植过程中环境变量的设置是非常重要的,如果设置的不正确会出现很多问题。这样最基本的QT的移植便算是完成了。还有字库和其他的一些东西,用到了再说吧。
验证QT程序在开发板上是否可以运行。这时你首先需要移植的就是 tslib库。
参考:http://blog.youkuaiyun.com/zhaole20094463/article/details/7272219
移植成功后,
主机终端执行:
#echo $QTDIR ――――回显为“/mini2440”则说明环境变量设置OK。
- #cd ……/ qt-embedded-linux-opensource-src-4.5.3/ examples/mainwindows/application/
- #qmake –project (如果提示无“qmake”命令,则肯定是你的环境变量的路径设置不正确,或者source setenv-embedded.sh一下即可)
- #qmake (成生Makefile)
- #make (生成可执行程序)
至此,如果你没发生什么错误应该可以在application下看到“application”的可执行程序了,把它下载到你的开发板下并执行:
- #./application –qws
注意:这里对内核是有要求的 一定要支持UNIX SOCKET的创建,否则会报错
QWSServerSocket::init: Address family not supported by protocol
QWSServerSocket: unable to create socket.
QWSServerPrivate::initServer: server socket not listening: Illegal seek
Failed to bind to /tmp/qtembedded-0/QtEmbedded-0
Aborted
现在就可以看到屏幕上的对话框了。
这样QT的移植初步就结束了。
一定要选择:
Networking support---->
Networking options ----->
<*>Unix domain sockets