- 配置交叉编译器
编译Qt4.8.7的源码库
- 进入
qt-everywhere-opensource-src-4.8.6/mkspecs/
目录,复制linux-arm-g++
目录为linux-arm-hisiv100-g++
- 进入
linux-arm-hisiv100-g++
,修改文件qmake.conf
修改如下,即将其中所有的
arm-linux
为arm-hisiv100nptl-linux
# modifications to g++.conf QMAKE_CC = arm-hisiv100nptl-linux-gcc QMAKE_CXX = arm-hisiv100nptl-linux-g++ QMAKE_LINK = arm-hisiv100nptl-linux-g++ QMAKE_LINK_SHLIB = arm-hisiv100nptl-linux-g++ # modifications to linux.conf QMAKE_AR = arm-hisiv100nptl-linux-ar cqs QMAKE_OBJCOPY = arm-hisiv100nptl-linux-objcopy QMAKE_STRIP = arm-hisiv100nptl-linux-strip
打开文件
qplatformdefs.h
增加#undef O_CLOEXEC 此处主要为解决:编译过程中找不到accept4函数问题(undefined reference to ‘accept4’)
编写
compile.sh
脚本./configure --prefix=./qt_3520D -static -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -xplatform qws/linux-arm-hisiv100-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake tools
注意:–prefix=./qt_3520D -xplatform qws/linux-arm-hisiv100-g++ 两个选项需要自定义
最后, 进行
make ;make install
- 进入
遇到的问题:
1. 一个海思的0xA00F8010 HI_ERR_VO_SYS_NOTREADY 系统未初始化
报错。一但报错,就是代码没有被执行。那就有可能是库没有被正确的链接。
报错,如果不是内存溢出等段错误,那就是没有干什么事,为什么没有做什么事,因为没有调用一些代码段。可能是动态库,没有被正确加载,调用。
这时候,只需要将正确的库加载到正确的位置上即可。
2. QFontDatabase error
# ./gui_test -qws
QFontDatabase: Cannot find font directory /home/xstrive/opt/Qt_ARM_static/qt-everywhere-opensource-src-4.8.7/qt_3520D/lib/fonts - is Qt installed correctly?
此时是因为找不到 字体库 fonts 的位置,需要设置 QT_QWS_FONTDIR
变量的值。export QT_QWS_FONTDIR=$QTDIR/lib/fonts
祝好运 滑稽
原文:详解 Qt 选择性编译和库裁减
推荐阅读:Cross-Compiling Qt for Embedded Linux Applications