1. 交叉编译工具链arm-none-linux-gnueabi-的安装
2. Qt4.8.1交叉编译安装和移植
这部分遇到很多问题,反复修改了很多配置,如下面列出的几篇。鉴于过程曲折,为避免以后再次陷入曲折过程,所以整理一下。
交叉编译qt4.8.4 for ARM
[交叉编译qt4.8.4 for ARM]遇到到问题
QT4.8.1移植到ARM目标板
首先,我的基本环境是:
ubuntu12.04 LTS , 要交叉编译的Qt版本是Qt4.8.1。
所需工具:
交叉编译工具:前一篇已经介绍过,是zlg提供的交叉编译工具。
qt4.8.4源码包:qt-everywhere-opensource-src-4.8.1.tar.gz
编译:
1. 解压qt4.8.1源码包:
tar -zxvf qt-everywhere-opensource-src-4.8.1.tar.gz
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++
# 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
3. 生成Makefile:
./configure -prefix /usr/local/qt-4.8.1-for-arm -embedded arm -host-little-endian -little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-gnueabi-g++
执行结果如下:
......
Qt is now configured for building ,just run 'make'
Once everything is built , you must run 'make install'
Qt will be installed into /usr/local/qt-4.8.1-for-arm
To reconfigure ,run 'make confclean' and 'configure'
4. 编译:
make #此过程大概需要两个多小时 make install
5. 修改环境变量
在~/.bashrc中添加以下语句
export ARMQTDIR=/usr/local/qt-4.8.1-for-arm export PATH=$ARMQTDIR/bin:$PATH export LD_LIBRARY_PATH=$ARMQTDIR/lib export QMAKESPEC=/usr/local/qt-4.8.1-for-arm/mkspecs/qws/linux-arm-gnueabi-g++
重新加载~/.bashrc:
source ~/.bashrc
6. 检查是否成功:
qmake -vQMake version 2.01a
Using Qt version 4.8.1 in /usr/local/qt-4.8.1-for-arm/lib
which qmake
/usr/local/qt-4.8.1-for-arm/bin/qmake
注:执行./configure 的参数标红部分的解释:
(1)如果没有 -little-endian, 执行上面的命令时,会得到提示:
The target system byte order could not be detected!
Turn on verbose messaging (-v) to see the final report.
You can use the -little-endian or -big-endian switch to
./configure to continue.
(2)如果是-xplatform /qws/linux-arm-g++,则在执行make时,会报错:
make[1]: arm-linux-g++:命令未找到
make[1]: *** [.obj/release-shared-emb-arm/qabstractanimation.o] 错误 127
make[1]:正在离开目录 `/home/tangys/qt-everywhere-opensource-src-4.8.1/src/corelib'
make: *** [sub-corelib-make_default-ordered] 错误 2
解决办法:-xplatform /qws/linux-arm-g++ 改为 -xplatform /qws/linux-arm-gnueabi-g++
然后: make confclean ,
再重新执行:
./configure -prefix /usr/local/qt-4.8.1-for-arm -embedded arm -host-little-endian-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-gnueabi-g++
7. 移植到ARM目标板上
7.1 交叉编译完成之后,还要将交叉编译好的qt4.8.1-for-arm移植到目标板:
进入/usr/local/qt4.8.1-for-arm,对嵌入式qt进行打包,复制到目标板的相同目录下,可以通过minicom进行。
(参考:http://www.linuxidc.com/Linux/2013-04/82384p2.htm)
7.2 在主机上交叉编译一个最简单到hello目标程序,通过nfs方式,在目标板上执行,出现错误:
root@freescale /mnt/nfs/hellow$ ./hellow
QFontDatabase::loadFromCache: Font path doesn't match. Found /usr/lib/fonts in database, expected/usr/local/qt-4.8.1-for-arm/lib/fonts
Aborted
实际上这两个路径都存在,而且内容也一样。
解决办法:参考 http://blog.csdn.net/g457499940/article/details/11902045
目标板终端执行env或export查看环境配置,在/etc/profile中添加下面一行,将QT_QWS_FONTDIR环境变量export成前面一个路径,
export QT_QWS_FONTDIR=/usr/lib/fonts
保存之后,执行
source /etc/profile
问题解决。