编译 Qt5.7.1 for ARM64(基于Windows)(第二版)
上次在《制作交叉 Qt 5.7.1 for Windows 》文中编译时需要挂载远程Linux根文件,由于远程机器和我的宿主机器不在一个局域网,导致中途偶有断连的情况,然后编译就中断了。
还有另一个小毛病就是最后安装阶段总是会安装到-sysroot指定的目录下去,这远程I/O也不流畅。
所以这次的目标是在Windows本机编译,重点工作是制作一份sysroot。
制作sysroot
1 2 3 apt install debootstrap debootstrap --arch =arm64 --variant=minbase focal /opt/sysroot-focal http://mirrors.aliyun.com/ubuntu-ports/ chroot /opt/sysroot-focal
参数含义:
--arch:系统架构
--variant:最小化安装
focal:系统代号
安装库
先编辑仓库源/etc/apt/sources.list
1 deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted universe multiverse
安装需要用到的库,因为我要编译Qt5.7.1,所以我安装了以下这些:
1 2 apt update apt install "^libxcb.*" libx11-dev libx11-xcb-dev libxext-dev libxi-dev libxfixes-dev libglu1-mesa-dev libfreetype6-dev libxrender-dev libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev libdbus-1-dev libasound2-dev libpulse-dev libudev-dev libwayland-dev libatspi2.0-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev zlib1g-dev libssl-dev libpng-dev libjpeg-dev libgbm-dev libdrm-dev libmtdev-dev unixodbc-dev libinput-dev libicu-dev libproxy-dev libdouble-conversion-dev libharfbuzz-dev freetds-dev libcups2-dev libpq-dev
打包
安装完成后退出sysroot,然后打包
1 2 3 4 5 exit cd /opt/sysroot-focaltar -cJvhf ../sysroot-focal-arm64.tar.xz usr/include usr/lib/aarch64-linux-gnu
将Linux上打包好的sysroot-focal-arm64.tar.xz拷贝到Windows宿主机,解压后编辑/usr/lib/aarch64-linux-gnu/libc.so文件
1 2 3 4 5 /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) GROUP ( /lib/aarch64-linux-gnu/libc.so.6 /usr/lib/aarch64-linux-gnu/libc_nonshared.a AS_NEEDED ( /lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 ) )
去掉其中的路径,只保留文件名
1 2 3 4 5 /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) )
至此,这个sysroot就可以在Windows上使用了。
编译Qt5.7.1
编译还是和以前一样,只不过-sysroot指向本机目录了
1 2 3 4 5 6 7 set PATH=C:\ai\cross-toolchain\Linux-aarch64\bin;C:\msys64\usr\bin;%PATH% mkdir build cd build ..\configure.bat -prefix /qt5.7.1-aarch64-linux-gnu -platform win32-g++ -xplatform linux-aarch64-gnu-g++ -sysroot C:\ai\sysroot-focal-arm64 -confirm-license -opensource -release -opengl es2 -posix-ipc -nomake examples -nomake tests -D QT_HAVE_POLL -L C:\ai\sysroot-focal-arm64\usr\lib\aarch64-linux-gnu mingw32-make -j mingw32-make install
编译其他Qt模块
以qtserialport模块为例
1 2 3 4 5 set PATH=C:\ai\cross-toolchain\Linux-aarch64\bin;C:\msys64\usr\bin;%PATH% cd C:\Qt\qtserialport-opensource-src-5.7.1 C:\qt5.7.1-aarch64-linux-gnu\bin\qmake.exe -spec linux-aarch64-gnu-g++ QMAKE_CXXFLAGS+=--sysroot=C:\ai\sysroot-focal-arm64 QMAKE_LFLAGS+=--sysroot=C:\ai\sysroot-focal-arm64 mingw32-make -j mingw32-make install