JZ2440移植Qt5.6笔记

编译Embeded Qt5.6

使用的平台时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桌面版

下载qt-opensource-linux-x64-android-5.7.0.run

sudo ./qt-opensource-linux-x64-android-5.7.0.run
安装的方法非常简单记得在一路next选择默认的即可,记得在选择组件的时候两个都勾上,把工具全部都安装上去

安装完成之后进行配置
打开软件-》Tools-》Options
JZ2440移植Qt5.6笔记_第1张图片
JZ2440移植Qt5.6笔记_第2张图片
JZ2440移植Qt5.6笔记_第3张图片
JZ2440移植Qt5.6笔记_第4张图片
编译之前先Run qmake一下
JZ2440移植Qt5.6笔记_第5张图片
再点击小锤子编译
在这里插入图片描述

安装 libiconv-1.14

下载解压后:
–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代码中添加如下代码设置字体
JZ2440移植Qt5.6笔记_第6张图片

JZ2440移植Qt5.6笔记_第7张图片
点击小锤子编译
生成的可执行文件在工程目录下build-app2-JZ2440-Debug下
在这里插入图片描述
将交叉编译好的可执行文件app2通过nfs拷贝到文件系统中

cp app2 /home/yy/nfsroot

在开发板上运行 ./app2
JZ2440移植Qt5.6笔记_第8张图片

JZ2440移植Qt5.6笔记_第9张图片

你可能感兴趣的:(Qt)