脚本配置
export PKG_CONFIG=/wd/qt5/aarch64-pkg-config
export PKG_CONFIG_LIBDIR=/opt/aarch64-sysroot/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=/opt/aarch64-sysroot
export PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
export PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
set -x
#-sysroot /opt/aarch64-sysroot \
./configure -v -pkg-config -prefix /opt/qt5.11.3_arm64 \
-extprefix /opt/qt5.11.3_arm64 \
-opensource \
-confirm-license \
-nomake tests \
-nomake examples \
-release \
-xplatform linux-aarch64-gnu-g++ \
-sysroot /opt/aarch64-sysroot \
-skip qtandroidextras \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qt3d \
-skip qtcanvas3d \
-skip qtcharts \
-skip qtdatavis3d \
-skip qtdeclarative -skip qtimageformats \
-skip qtgamepad \
-skip qtmacextras \
-skip qtmultimedia \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtquickcontrols \
-skip qtquickcontrols2 \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtserialbus \
-skip qtserialport \
-skip qtspeech \
-skip qtsensors \
-skip qtsvg \
-skip qtvirtualkeyboard \
-skip qtwayland \
-skip qtwebchannel \
-skip qtwebengine \
-skip qtwebglplugin \
-skip qtwebsockets \
-skip qtwebview \
-skip qtwinextras \
-skip qtxmlpatterns \
-no-opengl \
-openssl-runtime \
-qt-zlib \
-qt-libpng -qt-libjpeg \
-qt-xkbcommon-x11 \
-qt-freetype \
-qt-harfbuzz \
-qpa xcb \
-system-xcb \
-I /opt/aarch64-sysroot/usr/include -L /opt/aarch64-sysroot/usr/lib64
-sysroot /opt/aarch64-sysroot
指定目标aarch64根目录,提供目标机上的依赖库,主要是openssl和xcb,用sshfs挂载到本地目录 /opt/aarch64-sysroot,目标系统是centos7.2的aarch64机器
交叉编译x64本机的pkg-config找不到目标aarch64机器上的依赖库的pc文件,所以需要PKG_CONFIG_XX相关环境变量。
不知道为什么qt死活无法启用本机pkg-config,能找到但是不知道什么原因全局禁用了
为了顺利找到写了个/wd/qt5/aarch64-pkg-config包装脚本
-skip 跳过不需要的组件
-extprefix /opt/qt5.11.3_arm64很重要,交叉编译完成后,安装到本机的位置
如果只是指定了--prefix /opt/qt5.11.3_arm64,最后会安装到sysroot + prefix目录
-openssl-runtime,会检查编译环境中的openssl,但是生成的库不会直接依赖openssl,运行是动态加载,省心
-system-xcb,使用-sysroot /opt/aarch64-sysroot下的xcb-xxx扩展库
-qt-xcb 使用源码中的xcb-xxx扩展库
libxcb始终会在编译系统环境(包括-sysroot路径)中找
xcb库检查过程中各种失败,主要是用了pkgconfig,xcb.pc文件只描述-lxcb,补充-lXau,否则找不到libXau