imx6ul+QT5.6交叉编译

QT源码的编译依赖于tslib:

源码下载地址:
http://download.qt.io/archive/qt/5.6/5.6.0/single/


先解压:
tar -xf qt-everywhere-opensource-src-5.6.0.tar.gz
cd qt-everywhere-opensource-src-5.6.0

修改qmake配置文件:
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
#add by Sourcelink
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE    += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE  += -O2 -march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

#QMAKE_INCDIR += /work/nfs/imx6ul/rootfs/opt/tslib/include
#QMAKE_LIBDIR += /work/nfs/imx6ul/rootfs/opt/tslib/lib

# modifications to g++.conf
#modified by Sourcelink
QMAKE_CC                = arm-linux-gcc -lts
QMAKE_CXX               = arm-linux-g++ -lts
QMAKE_LINK              = arm-linux-g++ -lts
QMAKE_LINK_SHLIB        = arm-linux-g++ -lts

# modifications to linux.conf
#modified by Sourcelink
QMAKE_AR                = arm-linux-ar cqs
QMAKE_OBJCOPY           = arm-linux-objcopy
QMAKE_NM                = arm-linux-nm -P
QMAKE_STRIP             = arm-linux-strip
load(qt_config)
创建一个脚本进行编译:
vim build-armQt.sh
内容如下:

#!/bin/bash

export PATH="$PATH:/opt/FriendlyARM/toolchain/4.9.3/bin"

./configure -v -prefix /opt/qt-5.6.0 -release \
        -opensource -no-accessibility \
        -make libs -xplatform linux-arm-gnueabi-g++ -optimized-qmake \
        -pch \
        -qt-sql-sqlite \
        -qt-zlib \
        -tslib \
        -no-opengl \
        -no-sse2 \
        -no-openssl \
        -no-nis \
        -no-cups \
        -no-glib \
        -no-pkg-config \
        -no-separate-debug-info\
        -I /opt/tslib/include -L /opt/tslib/lib
make -j8
make install
-prefix /opt/qt-5.6.0 是指定编译完的安装目录;
-I /opt/tslib/include -L /opt/tslib/lib 指定tslib的头文件和库;
前面的帖子已经说了tslib的库编译了,大家可以参考下;

然后运行脚本:
chmod +x build-armQt.sh
./build-armQt.sh
切换到目标目录下看看是否安装成功:


设置QT的交叉编译环境:
设置编译器:


设置qmake:

这个是我们刚编译好的qt5.6的库安装位置;

设置构造:


接下来把刚编译好的qt5.6库拷贝到文件系统中去
cp /opt/qt-5.6.0/ /work/nfs/imx6ul/rootfs/opt/ -r
接下来设置环境,其实基本不用设置,天嵌都帮我们写好了:
vim /work/nfs/imx6ul/rootfs/etc/profile.d/embedsky_set.sh
修改如下:

基本算是完成了;

在pc端建个工程编译下:
setup1:

setup2:

setup3:

setup4:

setup5:

界面如下和编译如下:


然后现在把编译出来的文件拷贝到板子上:



现在去串口终端操作:
cd /work
./image -qws

效果图如下:

成功了,但是提示板子提示有错:
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
那必须解决它:
setup1:
下载 http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
并解压;
setup2:

./configure -prefix=$PWD/_install -host=arm-linux
setup3:
make
make的时候发现出错:
./stdio.h:1010:1: 错误: ‘gets’未声明(不在函数内)

cd srclib/                                                               #进到出错文件的目录
sed -i -e '/gets is a security/d' ./stdio.in.h               #编辑出错文件
cd ../                                                                    #回到编译对象目录
make                                                                    #重新Make

然后安装:
make install

把_install/lib 下的preloadable_libiconv.so 拷到文件系统/usr/lib 下
cp _install/lib/preloadable_libiconv.so /work/nfs/imx6ul/rootfs/usr/lib
然后设置环境变量
export LD_PRELOAD=/usr/lib/preloadable_libiconv.so
问题解决,把环境变量设置在天嵌的那个启动脚本中就可以;

你可能感兴趣的:(linux学习过程)