本来想编译个高版本的qt版本,由于公司的这个机器里一共只有50M的空间。所以最终还是选择用低版本吧。
QT的移植包括: QT库准备、QT库的编译 QT库的移植 和基于QT的应用程序的移植。
一、准备:
qt版本下载路径:http://qt-project.org/downloads
下载的qt-everywhere-opensource-src-4.6.3.tar.gz
我们需要编译三个不同类型的QT库,分别根据不同的配置生成的。
解压生成三个不同的文件qt-everywhere-opensource-src-4.6.3-arm,qt-everywhere-opensource-src-4.6.3-x86, qt-everywhere-opensource-src- 4.6.3-pc。
所有生成的库都放在/usr/local/Trolltech目录下。
二、编译:
1)进入qt-everywhere-opensource-src-4.6.3-pc中运行
# ./configure
# gmake
# gmake install
编译的时间很长哦!耐心等待。最终得到的库信息:955M Qt-4.6.3
2)进入qt-everywhere-opensource-src-4.6.3-x86目录
# ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
# gmake
# gmake install
编译也是漫长的。最终得到的库信息:865M QtEmbedded-4.6.3
进入
qt-4.6.3-arm
目录,输入编译基于
arm
处理器的配置命令
3)进入 qt-everywhere-opensource-src-4.6.3-arm目录# ./configure -prefix /usr/local/Trolltech -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 4,8,16,18,24,32 -fast -optimized-qmake -no-multimedia -no-script -no-scripttools -no-svg -no-sql-sqlite -no-testlib -no-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -host-little-endian -no-qt3support -no-xmlpatterns -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -no-phonon -no-nis -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -qt-mouse-tslib -I/opt/tslib-1.0/include -L/opt/tslib-1.0/lib
#gmake
#gmake install
顺利编译完成后,会在/usr/local/Trolltech先生成文件QtEmbedded-4.6.3-arm。大小:49M QtEmbedded-4.6.3-arm
arm的配置参数后面专门讲解,因为自身空间小的缘故配置的时候一定要根据自己的使用情况来控制。
三、交叉编译
基于arm的QT库已经生成,交叉编译环境只需要配置好环境变量便可以。
编写一个脚本,每次开服务器的时候运行一次便可。vi setenv-embedded.sh 脚本内容如下:
#bash shell
#setenv-embedded.sh
PATH=/usr/local/QtEmbedded-4.6.3-arm/bin:$PATH
QTDIR=/usr/local/QtEmbedded-4.6.3-arm
MAINPATH=$QTDIR/man:$MAINPATH
LD_LIBRATY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MAINPATH LD_LIBRARY_PATH
执行命令如下:
source setenv-embedded.sh
四、QT库的移植
(1)在你的开发板或者设备上创建目录可以根据你的喜好,比如放在home下mkdir qt
(2)拷贝PC或者Linux服务器中的/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib的内容到开发板的qt目录下
(3)拷贝PC机或者Linux服务器中的/usr/local/Trolltech/QTEmbedded-4.6.3-arm/bin的内容到开发板qt目录下。注意这两个拷贝都用打包的方式传送到开发板中。
(4)配置环境变量:可以直接在vi /etc/profile里面改变,这样在每次开机的时候默认就是设置好。
记着开发板上修改/tslib/etc下的ts.conf #modul_raw input 去掉#然后删除多余的空格。
配置如下:
export TSLIB_CALIBFILE='/etc/pointercal' #配置校准文件 上节中的触屏的配置
export TSLIB_CONFFILE='/etc/ts.conf' #tslib的配置文件
export TSLIB_CONSOLEDEVICE='none' #控制台设备
export TSLIB_FBDEVICE='/dev/fb0' #framebuffer设备
export TSLIB_PLUGINDIR='/usr/lib/ts' #ts插件
export TSLIB_TSDEVICE='/dev/input/by-path/platform-touchscreen-event' #ts设备
export QTDIR=/home/user0/qt #qt安装路径
export QT_QWS_FONTDIR=$QTDIR/lib/fonts #qt字体库路径
export T_ROOT=/home/user0/tslib1.0 #tslib安装的路径
export PATH=$QTDIR/bin:$PATH #qt bin文件路径
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH #声明环境变量
五、应用程序的移植
(1)编写应用程序 在linux服务器上编辑hell.cpp文件,从很简单的hello开始,呵呵
#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();
}
(2)编译
1)/usr/local/Trolltech/QtEmbedded-4.6.3-arm/qmake -project 生成.pro文件
2)/usr/local/Trolltech/QtEmbedded-4.6.3-arm/qmake 生成交叉编译Makefile文件
3)make 编译
如果在编译的时候报错:
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_read_raw'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_open'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_fd'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_config'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_close'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_read'
修改makefile中的Lib加上-L/opt/tslib-1.0/lib -lts 根据你的tslib路径,我这边的原因是生成的makefile中没有加上 -lts导致的。光有个路径但是没有库。
至此,arm交叉编译生成的执行文件hello出来了。拷贝hello到机器上。增加执行权限并运行: ./hello -qws &
在开发板上运行的时候记着加上-qws。
在你的开发板看到界面了吗?我是看到了。小开心一下!路漫漫。继续加油!