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 有没有实际跑起来看看效果 学习一下来着了 参考下。
页:
[1]
2