使用的平台时ubuntu18.04,交叉编译环境时4.4.3
依赖库安装:
sudo apt-get install qt5*-dev
sudo apt-get install qtbase5-dev
sudo apt-get install qtdeclarative5-dev qml-module-qtquick-controls
先提前安装好tslib库
注意修改/opt/FriendlyARM/toolschain/4.4.3arm-none-linux-gnueabi/sys-root/usr/include/linux/input.h,将EV_VERSION改为0x010001
1、准备好源码包
qt-everywhere-opensource-src-5.6.0.tar.gz
2、解压qt5.6源码,并修改配置平台信息
tar -zxf qt-everywhere-opensource-src-5.6.0.tar.gz
cd qt-everywhere-opensource-src-5.6.0/
gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
将下面的代码复制进qmake.conf文件中
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t
QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
include(../common/qws.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_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
3、配置编译信息
把下面这些粘贴进去
-prefix后面是编译好的Qt安装路径,提前建立好
-I后面是编译安装好的tslib中include路径
-L后面是编译安装好的tslib中lib路径
./configure -prefix /home/yy/jz2440/qt/Qt5.6 -v -opensource -release -confirm-license -xplatform linux-arm-gnueabi-g++ -shared -qt-zlib -no-gif -qt-libjpeg -no-nis -no-opengl -no-iconv -no-cups -no-glib -no-dbus -no-rpath -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-openssl -nomake tools -qt-libpng -tslib -nomake examples -skip qtdeclarative -I /home/yy/jz2440/wenjian/tslib/tmp/include -L /home/yy/jz2440/wenjian/tslib/tmp/lib
注意,在脚本中有一个很重要配置:-skip qtdeclarative \ ,如果不加上这一句,在make时出现错误:
sh:1:python:not found
Project ERROR:Building QtQml requires Python.
Makefile:44: recipe for target 'module-qtdeclarative-install_subtargets' failed
make: *** [module-qtdeclarative-install_subtargets] Error 3
在实际的编译过程中,使用其他博客的配置信息会出错,以上的配置信息实测没有问题
4、在编译之前要修改两个文件,否则编译会不通过
修改qtimageformats/src/3rdparty/libwebp/src/dsp/dsp.h文件:
//#define WEBP_USE_NEON //注释第68行后就可以编译通过
修改/home/msi/qt-everywhere-opensource-src-5.6.0/qttools/src/src.pro
将SUBDIRS += linguist \ 下面一行的 “qdoc” 删除
否则,在接下来的make &&make install过程中会出现(原因是qdoc这个包里面用到 qml,而我们在选项-skip qtdeclarative 设置了不编译qml,所以不删除这个qdoc会报错Project ERROR: Unknown module(s) in QT: qmldevtools-private:
cd qdoc/ && ( test -e Makefile || /home/msi/qt-everywhere-opensource-src-5.6.0/qtbase/bin/qmake /home/msi/qt-everywhere-opensource-src-5.6.0/qttools/src/qdoc/qdoc.pro -o Makefile ) && make -f Makefile install
Project ERROR: Unknown module(s) in QT: qmldevtools-private
Makefile:188: recipe for target 'sub-qdoc-install_subtargets' failed
make[2]: *** [sub-qdoc-install_subtargets] Error 3
make[2]: Leaving directory '/home/msi/qt-everywhere-opensource-src-5.6.0/qttools/src'
Makefile:56: recipe for target 'sub-src-install_subtargets' failed
make[1]: *** [sub-src-install_subtargets] Error 2
make[1]: Leaving directory '/home/msi/qt-everywhere-opensource-src-5.6.0/qttools'
Makefile:529: recipe for target 'module-qttools-install_subtargets' failed
make: *** [module-qttools-install_subtargets] Error 2
5、make -j4
6、make install
下载qt-opensource-linux-x64-android-5.7.0.run
sudo ./qt-opensource-linux-x64-android-5.7.0.run
安装的方法非常简单记得在一路next选择默认的即可,记得在选择组件的时候两个都勾上,把工具全部都安装上去
安装完成之后进行配置
打开软件-》Tools-》Options
编译之前先Run qmake一下
再点击小锤子编译
下载解压后:
–host编译为目标格式文件
–prefix编译安装目标目录
CC编译器中arm-none-linux-gnueabi-gcc路径
LDFLAGS编译器中/sys-root/lib路径
cd libiconv-1.14/
./configure --host=arm-none-linux-gnueabi --prefix=/home/china/work/jz2440/qt/libiconv CC=/usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi-gcc LDFLAGS="-L/usr/local/arm/gcc-4.4.3/bin/arm-none-linux-gnueabi/sys-root/lib" --enable-static
make
make install
然后把安装目录下的preloadable_libiconv.so文件复制到文件系统的/usr/lib/文件下,在/etc/profile中添加
export LD_PRELOAD=/usr/lib/preloadable_libiconv.so:$TSLIB_ROOT/lib/libts.so
默认时不能显示中文的,需要自己加入中文字库DroidSansFallback.ttf
先下载DroidSansFallback.ttf字库文件
将字库文件放入到文件系统中/usr/lib/fonts/中,如果没有fonts目录可以自己建一个
然后在Qt代码中添加如下代码设置字体
点击小锤子编译
生成的可执行文件在工程目录下build-app2-JZ2440-Debug下
将交叉编译好的可执行文件app2通过nfs拷贝到文件系统中
cp app2 /home/yy/nfsroot