fuchch 发表于 2016-10-13 16:25:57

qt-5.6.0 for arm的移植

      移植是比较简单的,关键的问题在于裁剪。目前我没做裁剪优化。

   如果只需要基本模块,只要下载qtbase-5.6.0即可。
   (1)解压,我将其重命名为qtbase-5.6.0
   (2)编译ARM版的,所以选择linux-arm-gnueabi-g++,修改qtbase-5.6.0/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

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   +=-O2 -march=armv5te

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

# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabi-gcc
QMAKE_CXX               = arm-linux-gnueabi-g++
QMAKE_LINK            = arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB      = arm-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY         = arm-linux-gnueabi-objcopy
QMAKE_NM                = arm-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-linux-gnueabi-strip
load(qt_config)
            QT5较QT4最大的不同就是取消了QWS,使用QPA替代,QT_QPA_DEFAULT_PLATFORM定义了默认情况下使用哪个,这里选择linuxfb,
            QMAKE_CFLAGS_RELEASE   做核版本配置,可以是armv5te、armv7xxx,不知道的可以不写。
             然后就是arm-linux-gnueabi-xxx 交叉编译工具链的名字修改
   (3)在qtbase-5.6.0下建立build目录,编译到此目录下
   (4)进入qtbase-5.6.0/build目录,创建一个编译脚本,名为buildqt5.sh(名字随便)
             #!/bin/bash

TSLIB=/home/ubuntu/tslib

CROSS=/home/ubuntu/external-toolchain
export PATH=$PATH:$CROSS/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CROSS/lib:$TSLIB/lib
export LIBRARY_PATH=$LIBRARY_PATH:$CROSS/include:$TSLIB/include

../configure \
    -release \
    -opensource -confirm-license \
    -shared \
    -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci \
    -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-tds \
    -no-qml-debug \
    -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 \
    -no-mips_dsp -no-mips_dspr2 \
    -no-pkg-config \
    -qt-zlib \
    -no-journald -no-syslog -no-gif \
    -no-libpng -qt-libjpeg -qt-freetype -no-harfbuzz \
    -no-openssl -no-libproxy \
    -no-xinput2 -no-xcb-xlib -no-glib \
    -no-xkbcommon-evdev -no-libinput \
    -nomake examples \
    -nomake tests \
    -no-compile-examples \
    -no-pulseaudio -no-alsa -no-gtkstyle \
    -gui -widgets \
    -no-nis -no-cups -no-iconv \
    -evdev -no-icu -no-fontconfig -strip \
    -no-pch -no-dbus \
    -tslib -I$TSLIB/include -L$TSLIB/lib \
    -force-asserts \
    -no-use-gold-linker \
    -no-xcb -no-kms -no-mirclient \
    -linuxfb -no-egl -no-eglfs -no-directfb -no-opengl \
    -xplatform linux-arm-gnueabi-g++ \
    -no-gstreamer -no-system-proxies \
    -prefix $(pwd)/../../qt5.6.0 -v

make && make install

            这里我考虑到以后需要用到触摸屏,所以把TSLIB加上。不需要数据库、opengl、xcb等等,当然有些默认是关闭的,可以在qtbase-5.6.0下./configure --help查看具体的选项。选择-linuxfb。这里需要注意的是-shared,若使用-static,用静态库去编译QT程序,可以,但是这样的程序不能使用QPA等插件了,linuxfb插件也不能加载了,程序也就运行不起来了。-prefix定义INSTALL到哪里
   (5) 添加执行权限,运行这个脚本。环境啊配置啊,都没问题的话,编译完成就会得到qtbase-5.6.0/../qt5.6.0,这就是需要的ARM版qtbase5.6.0

desig 发表于 2016-10-13 21:09:43

有没有实际跑起来看看效果

longxuekai 发表于 2016-10-14 00:25:00

学习一下来着了

木子清风 发表于 2016-10-14 10:58:57

天各一方8 发表于 2017-6-4 09:49:31

scapaflow 发表于 2017-6-7 09:06:40

参考下。

tiny2010 发表于 2020-5-8 08:41:26

h09721 发表于 2020-6-3 08:52:25

yyjccit 发表于 2020-6-10 08:27:16

tiny2010 发表于 2020-11-3 08:47:19

页: [1] 2
查看完整版本: qt-5.6.0 for arm的移植