作者:释迦Sakya
转自:http://my.oschina.net/u/212149/blog/69589
一 操作环境
ubuntu12.04
qt-everywhere-opensource-src-4.8.2.tar.gz
arm-2009q1-203-arm-none-linux-gnueabi.bin
SEED_DEC138
二 前期准备
1 用户已经安装好交叉编译工具
2 下载 Qt libraries 4.8.2 for embedded Linux (228 MB),得到qt-everywhere-opensource-src-4.8.2.tar.gz
三 编译安装
总体来说,编译过程分如下四个步骤
1 解压qt-everywhere-opensource-src-4.8.2.tar.gz
2 ./configure配置选项,生成相应的Makefile
3 make交叉编译生成库文件
4 sudo make install 安装生成的库
详细的配置编译过程:
1 在用户预定的位置解压缩qt-everywhere-opensource-src-4.8.2.tar.gz
cd <anywhere>
$ tar -zxvf qt-everywhere-opensource-src-4.8.2.tar.gz
生成目录 qt-everywhere-opensource-src-4.8.2/
$ cd qt-everywhere-opensource-src-4.8.2/
2 ./configure配置选项
在编译嵌入式Linux平台的库之前,通过运行./configure -embedded -help,可以列出所有的配置选项。
QT官方网站有配置选项的帮助页面http://qt-project.org/doc/qt-4.8/configure-options.html
在运行配置之前,需要修改一个文件。在目录qt-everywhere-opensource-src-4.8.2/mkspecs/qws/linux-arm-g++/下,
有一个文件qmake.conf ,指示了编译使用的交叉编译工具,需要对这个文件作简单的配置。
本文用的arm-2009q1-203-arm-none-linux-gnueabi.bin所提供的交叉编译工具是arm-none-linux- gnueabi-xxx形式的,所以qmake.conf修改如下:
$ cd <anywhere>/qt-everywhere-opensource-src-4.8.2/mkspecs/qws/linux-arm-g++/
$ gedit qmake.conf
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = arm-none-linux-gnueabi-strip
至于 -lts 那个选项,原来没加,出现了 undefined reference to `ts_read_raw' 错误。所以建议加上。
配置选项很多,网上搜索了一个可以用的,这部分内容以后会单独写一篇文档讨论。
./configure -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg
-no-libmng -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I /opt/tslib/include -L /opt/tslib/lib -confirm-license "$@"
选项 -xplatform qws/linux-arm-g++ ,就是与我们修改的qmake.conf相关的。
配置完成后会生成一个Makefile文件。
3 $ make
进行交叉编译,大概需要2-3个小时。
编译的时候,出现了错误qt Error: no such instruction: `swpb %cl,%al,[%esi]' ,我把压缩包重新解压并重复了上述过程,没有出现上述错误。
网上也有另外的解决办法,就是修改源代码,可以参考一下http://blog.csdn.net/dkxatt/article/details/6208130
4 $ sudo make install
默认安装在 /usr/local/Trolltech/QtEmbedded-4.8.2-arm/目录下。
四 总结
至此,移植已经完成一半了。至于怎么让代码在demo板上跑起来,下一篇文章再讨论。
参考文档:
http://qt-project.org/doc/qt-4.8/qt-embedded-install.html
http://hi.baidu.com/lujizhen/blog/item/eb5cc482cf5f1e86f603a6a5.html
http://hi.baidu.com/erteron/blog/item/a8724f03b28f5290e950cd87.html