手里有块 AnyCloud37D 平台的 armv5 开发板,想在上面展示浏览器控件。开发板自带 Qt 4.8.7 版本,但是缺少 QtWebkit 库。本文记录在 Ubuntu 20.04 LTS 主机上交叉编译 Qt 4.8.7 的步骤及遇到的问题的解决方案。
1 Qt 4.8.7 源码获取
官方链接:https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz
tar -xzf qt-everywhere-opensource-src-4.8.7.tar.gz
cd qt-everywhere-opensource-src-4.8.7
2 环境配置
2.1 主机环境
Ubuntu 20.04 LTS 默认的 gcc 版本是 gcc-9,然而对于 Qt 4.8.7 来说 gcc-9 版本过新,编译过程中会出问题,需要使用 gcc-8 版本方能顺利编译。
sudo apt install -y gcc-8 g++-8
查看系统是否已配置 gcc 软链接
sudo update-alternatives --config gcc
将 gcc-8 和 gcc-9 添加到软链,数字代表优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 20 --slave /usr/bin/g++ g++ /usr/bin/g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 30 --slave /usr/bin/g++ g++ /usr/bin/g++-9
执行以下命令按提示配置系统的 gcc 默认版本
sudo update-alternatives --config gcc
2.2 开发板环境
2.2.1 基础信息
此开发板 CPU 型号是 AK3760D,架构是 armv5tejl。
查看开发板字节顺序是大端还是小端
echo -n I | od -o | head -n1 | cut -f2 -d" " | cut -c6
或者
echo -n I | od -o | head -n1 | awk '{print $2}'| cut -c6
输出 1 为小端模式,0 为大端模式。
此开发板输出 1,为小端模式。
2.2.2 交叉编译工具链
自行寻找对应该平台的交叉编译工具链。
将交叉编译工具链安装到 Ubuntu 主机的 /opt
下
/opt/arm-anykav500-linux-gnueabi
gcc:/opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-gcc
g++:/opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-g++
3 Qt 4.8.7 编译
编辑qt-everywhere-opensource-src-4.8.7/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
#
# qmake configuration for building with arm-anykav500-linux-gnueabi-g++
#
QMAKE_CFLAGS_RELEASE = -O3 -march=armv5
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-gcc
QMAKE_CXX = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-g++
QMAKE_LINK = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-objcopy
QMAKE_STRIP = /opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-strip
load(qt_config)
执行 configure
./configure -prefix /opt/qt-4.8.7 -release -opensource -confirm-license -webkit -no-openssl -nomake demos -nomake examples -nomake tests -optimized-qmake -no-script -xplatform qws/linux-arm-gnueabi-g++ -device-option CROSS_COMPILE=/opt/arm-anykav500-linux-gnueabi/usr/bin/arm-anykav500-linux-gnueabi-g++ -little-endian -no-qt3support -embedded arm
configure 命令里的某些 options 与上文某些操作是对应的。
按提示继续执行
make -j2
sudo make install
至此,适用于目标开发板的 Qt 4.8.7 编译完成,库等产物在指定的安装目录下:/opt/qt-4.8.7
若需要重新 configure,先执行清理操作
make confclean