cross-compile-qt-sources

Desc

qt-everywhere-opensource-src-5.9.8.tar.xz是源码包,可编译出qmake工具,用于交叉编译 QT 程序,适用于交叉编译 QT 程序以放入开发板运行。
qt-opensource-linux-x64-5.9.8.run是 linux 程序,执行安装出 QtCreator 和 x86_64 的 qmake 程序,适用于在 linux 系统上开发 QT。

Env

1
2
export PATH=$PATH:$HOME/sysroots/x86_64-linux/usr/bin/arm-oe-linux-gnueabi
export SYSROOT_PATH=$HOME/sysroots/mdm9607

Depends

由于下面的编译步骤依赖了freetypetslib两个库,所以需要提前编译该依赖库。
编译步骤可参考:this

Build

cd $HOME/qt-everywhere-opensource-src-5.9.8/qtbase/mkspecs/
cp -rf linux-arm-gnueabi-g++ arm-oe-linux-gnueabi-g++

arm-oe-linux-gnueabi-g++/qmake.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--- a/qmake.conf
+++ b/qmake.conf
@@ -11,14 +11,14 @@
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++
+QMAKE_CC = arm-oe-linux-gnueabi-gcc
+QMAKE_CXX = arm-oe-linux-gnueabi-g++
+QMAKE_LINK = arm-oe-linux-gnueabi-g++
+QMAKE_LINK_SHLIB = arm-oe-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
+QMAKE_AR = arm-oe-linux-gnueabi-ar cqs
+QMAKE_OBJCOPY = arm-oe-linux-gnueabi-objcopy
+QMAKE_NM = arm-oe-linux-gnueabi-nm -P
+QMAKE_STRIP = arm-oe-linux-gnueabi-strip
load(qt_config)
$HOME/qt-everywhere-opensource-src-5.9.8/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
./configure \
-prefix $HOME/.local \
-extprefix $HOME/.local \
-examplesdir $HOME/.local/qtexamples \
-confirm-license \
-opensource \
-shared \
-release \
-make libs \
-xplatform arm-oe-linux-gnueabi-g++ \
-sysroot $SYSROOT_PATH \
-gcc-sysroot \
-optimized-qmake \
-system-freetype \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-separate-debug-info \
-no-fontconfig \
-nomake tools \
-nomake tests \
-no-iconv \
-compile-examples \
-tslib \
-I$SYSROOT_PATH/include \
-I$SYSROOT_PATH/include/freetype2 \
-L$SYSROOT_PATH/lib

make && make install (这里-extprefix 才是实际安装的路径, -prefix 可以指定跟-extprefix 一致)

Runtime Env

下面是运行时的一些环境变量,仅供参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
export LD_LIBRARY_PATH=/cache/qt5/lib:/cache/install/lib:/usr/lib:/lib:$LD_LIBRARY_PATH
export QT_DEBUG_PLUGINS=0
export QT_QPA_FONTDIR=/cache/qt5/font
export QT_QPA_PLATFORM_PLUGIN_PATH=/cache/qt5/plugins/
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=320x240:mmSize=320x240:offset=0x0:tty=/dev/tty0
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1:rotate=0
export QT_QPA_FB_TSLIB=1
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/cache/pointercal
export TSLIB_CONFFILE=/cache/ts.conf
export TSLIB_PLUGINDIR=/cache/install/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_PRELOAD=/cache/install/lib/libts.so