Debian 9
1、依赖
Qt源码添加xcb支持,依赖xcb-util-wm、xcb-util、xcb-util-image、xcb-util-keysyms、xcb-util-renderutil、libxkbcommon、libxkbcommon-x11,其中libxkbcommon依赖xkeyboard-config、libxml,libxml依赖zlib、xz-utils。
1.1、xcb-util-wm
下载地址:Index of /releases/individual/xcbhttps://www.x.org/releases/individual/xcb/
#解压
tar -zxvf xcb-util-wm-0.4.1.tar.gz
cd xcb-util-wm-0.4.1
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.2、xcb-util
下载地址:Index of /releases/individual/xcbhttps://www.x.org/releases/individual/xcb/
#解压
tar -zxvf tar -zxvf xcb-util-0.4.0.tar.gz
cd xcb-util-0.4.0
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.3、xcb-util-image
下载地址:Index of /releases/individual/xcbhttps://www.x.org/releases/individual/xcb/
#解压
tar -zxvf xcb-util-image-0.4.0.tar.gz
cd xcb-util-image-0.4.0
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.4、xcb-util-keysyms
下载地址:Index of /releases/individual/xcbhttps://www.x.org/releases/individual/xcb/
#解压
tar -zxvf xcb-util-keysyms-0.4.0.tar.gz
cd xcb-util-keysyms-0.4.0
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.5、xcb-util-renderutil
下载地址:Index of /releases/individual/xcbhttps://www.x.org/releases/individual/xcb/
#解压
tar -zxvf xcb-util-renderutil-0.3.9.tar.gz
cd xcb-util-renderutil-0.3.9
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.6、zlib
下载地址:zlib Home Site
#解压
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
CC=/home/user/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
./configure --prefix=/path/to/prefix
#编译
make
#安装
make install
1.7、xz-utils
下载地址:XZ Utils
#解压
tar -zxvf xz-5.2.5.tar.gz
cd xz-5.2.5
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf
#编译
make
#安装
make install
1.8、icu
下载地址:GitHub - unicode-org/icu: The new home of the ICU project source code.
#解压
tar -zxvf icu-release-70-1.tar.gz
cd icu-release-70-1/icu4c/source
#新建build目录
mkdir build
#新建config目录
mkdir config
touch icucross.mk
touch icucross.inc
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf \
--host=arm-linux-gnueabihf \
--enable-option-checking \
--with-cross-build=/home/user/toolchain/icu-release-70-1/icu4c/source/build
#编译
make
#安装
make install
1.9、libxml
下载地址:ftp://xmlsoft.org/libxml2/
#解压
tar -zxvf xcb-util-renderutil-0.3.9.tar.gz
cd xcb-util-renderutil-0.3.9
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking \
--with-python=/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/lib
#编译
make
#安装
make install
1.10、xkeyboard-config
#解压
tar -zxvf xkeyboard-config-2.30.tar.gz
cd xkeyboard-config-2.30
#交叉编译环境,其中/path/to/cross-compile指交叉编译器目录
#如/home/user/toolchain/arm-linux-gnueabihf/bin
export PATH=$PATH:/path/to/cross-compile
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
./configure --prefix=/path/to/prefix \
--host=arm-linux-gnueabihf \
--enable-option-checking
#编译
make
#安装
make install
1.11、libxkbcommon
下载地址:xkbcommon - a keyboard handling libraryhttps://www.xkbcommon.org/
#解压
xz -d libxkbcommon-1.4.0.tar.xz
tar -xvf libxkbcommon-1.4.0.tar
cd libxkbcommon-1.4.0
#新建交叉编译配置
nano cross.txt
cross.txt内容如下:
[binaries]
c = '/home/user/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc'
cpp = '/home/user/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-c++'
ar = '/home/user/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar'
strip = '/home/user/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip'
ld = '/home/sam/toolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld'
pkgconfig = '/usr/bin/pkg-config'
cmake = '/usr/bin/cmake'
[properties]
skip_sanity_check = true
c_link_args = ['-llzma', '-lz','-lXau', '-lxml2']
[paths]
libdir = '/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/lib'
includedir = '/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/include'
prefix = '/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf'
[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'ARM'
endian = 'little'
[build_machine]
system = 'linux'
cpu_family = 'x86_64'
cpu = 'i686'
endian = 'little'
#安装依赖
sudo apt install bison
#配置,其中/path/to/prefix指编译安装目录
#如/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf
#把编译结果安装在交叉编译器中,否则引用到该库需要指定对应的目录
meson setup build --prefix /path/to/prefix \
--buildtype release \
--cross-file cross.txt \
-Denable-x11=false \
-Denable-wayland=false \
-Denable-docs=false \
-Denable-xkbregistry=false \
-Dxkb-config-root=/home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/lib/pkgconfig
#编译安装
ninja -C build install
2、交叉编译Qt
2.1、文件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)
QMAKE_INCDIR += /home/sam/ArmToolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/include
QMAKE_LIBDIR += /home/sam/ArmToolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/lib
QMAKE_LIBS += -lXau
QMAKE_LIBS += -lxcb
QMAKE_LIBS += -lxcb-xkb
QMAKE_LIBS += -lxkbcommon
QMAKE_LIBS += -lxkbcommon-x11
# modifications to g++.conf
QMAKE_CC = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP = /home/sam/ArmToolchain/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip
load(qt_config)
2.2、脚本configure.sh
#! /bin/bash
../configure \
-prefix /home/user/toolchain/arm-linux-gnueabihf/arm-linux-gnueabihf/ \
-opensource \
-confirm-license \
-release \
-xplatform linux-arm-gnueabihf-g++ \
-make libs \
-nomake examples \
-nomake tools \
-nomake tests \
-no-opengl \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcharts \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdeclarative \
-skip qtdoc \
-skip qtgamepad \
-skip qtgraphicaleffects \
-skip qtimageformats \
-skip qtlocation \
-skip qtlottie \
-skip qtmacextras \
-skip qtmultimedia \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtquick3d \
-skip qtquickcontrols \
-skip qtquickcontrols2 \
-skip qtquicktimeline \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtvirtualkeyboard \
-skip qtwayland \
-skip qtwebchannel \
-skip qtwebglplugin \
-skip qtwebsockets \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-xkbcommon \
-qpa xcb
-xcb
2.3、执行编译
./configure.sh
make && make install
执行配置脚本的结果