系统环境:ubuntu 16.04
QT版本:5.12
交叉编译工具链:gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu
1.下载qt-everywhere-src-5.12.0.tar.xz
https://download.qt.io/archive/qt/5.12/5.12.0/single/
2.修改配置文件
vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
将等号右边改为你自已的交叉编译工具链,如果没有将交叉编译工具链配置到环境变量中,可以写绝对路径
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP = /disksdh/shiyu/ipc-sdk-full-release-0821/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
load(qt_config)
3.配置qt
./configure -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -prefix /usr/local/qt5.12.0 -nomake examples -no-opengl -silent -qpa linuxfb
-xplatform:指定第二步修改的编译链配置文件。
-prefix:指定安装的目录。
其它组件按需配置。
4.编译
make -j4
make install
5.安装到开发板
将install后的目录复制到开发板,然后配置如下环境变量
export QTDIR=/data/qt_c305x_install
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x600:mmSize=800x600:offset=0x0:tty=/dev/tty1
6.使用vnc显示界面
如果板子没有屏可以用VNC显示,先屏蔽QT_QPA_PLATFORM变量,然后用下面的指令启动qt应用
app -platform vnc:size=1280x800,port=12345,depth=32,mmsize=600x350
然后在pc是用VNC Viewer输入开发板ip和prot即可显示界面。
7.字体
编译出来的qt库中没有字体,字体可以用文泉驿字体,下载ttc字体文件,放到lib/fonts中。
https://sourceforge.net/projects/wqy/files/wqy-zenhei/
在程序中设置字体:
QFont font;
font.setPixelSize(16);
font.setFamily("WenQuanYi Zen Hei");
font.setBold(false);
w.setFont(font);
8.移植过程的错误
8.1 opengl错误
百度安装库解决
8.2 编译libiconv
在执行QT程序是出现如下错误
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
解决 :下载 http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
./configure -prefix=$PWD/_install -host=arm-linux-gnueabihf
make
make install
把_install/lib 下的preloadable_libiconv.so 拷到系统的/system/lib 下,
export LD_PRELOAD=/system/lib/preloadable_libiconv.so
8.3 在编译libiconv时会出现错误
In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
解决方法
在libiconv-1.14/srclib/stdio.in.h 中把
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
替换成
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
8.4 64位工具链编译错误
下载新的config.sub和config.guess,替换掉旧的,注意libiconv源码目录下三个地方都要替换:
./libcharset/build-aux/config.sub
./build-aux/config.sub
./config.sub
wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'