问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt 5.12.8交叉编译教程:从零开始

创作时间:
作者:
@小白创作中心

Qt 5.12.8交叉编译教程:从零开始

引用
CSDN
9
来源
1.
https://blog.csdn.net/weixin_42568710/article/details/142815914
2.
https://github.com/abhiTronix/raspberry-pi-cross-compilers/wiki/64-Bit-Cross-Compiler:-Installation-Instructions
3.
https://blog.csdn.net/u012402739/article/details/128388365
4.
https://blog.csdn.net/weixin_43972388/article/details/136272881
5.
https://blog.csdn.net/asanpyx/article/details/136622374
6.
https://wiki.qt.io/Qt_5.14_Tools_and_Versions
7.
https://doc.embedfire.com/linux/rk356x/Qt/zh/latest/lubancat_qt/install/install_arm_2.html
8.
https://www.cnblogs.com/weidongshan/p/18285986
9.
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/13-2-rel1

Qt作为一款跨平台的C++图形用户界面库,在嵌入式开发领域有着广泛的应用。无论是工业控制、医疗设备还是消费电子,Qt都能提供强大的GUI支持。本文将详细介绍如何从零开始交叉编译Qt 5.12.8,适用于嵌入式Linux系统。

01

环境准备

1.1 交叉编译工具链

首先需要搭建交叉编译环境。这里推荐使用Raspberry Pi的交叉编译工具链项目,支持多种版本的Raspberry Pi操作系统。

  1. 更新环境
sudo apt update && sudo apt dist-upgrade
  1. 安装基础工具
sudo apt-get install build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev
  1. 下载工具链

SourceForge下载适合的工具链版本。例如,对于Bullseye(Debian 11):

wget https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bullseye/aarch64-rpi-bullseye-linux-gnu-gcc-14.2.0.tar.gz
  1. 解压并配置环境变量
tar -xf aarch64-rpi-bullseye-linux-gnu-gcc-14.2.0.tar.gz
export PATH=$PATH:/path/to/cross-compiler/bin

1.2 安装依赖库

在开始编译Qt之前,需要在目标板卡上安装一系列依赖库。这些库将通过创建sysroot目录的方式引入到编译环境中。

  1. X11相关库
sudo apt-get install -y libx11-dev libxcb-xinput-dev libpq-dev libiodbc2-dev firebird-dev \
libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev \
libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev \
libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 \
libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev \
libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev libatspi2.0-dev \
libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev libxtst-dev libpci-dev libcap-dev \
libxrandr-dev libdirectfb-dev libaudio-dev libxkbcommon-x11-dev
  1. GStreamer相关库
sudo apt-get install -y libgstreamer1.0-0 gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools libunwind-dev
  1. OpenGL相关库
sudo apt-get install -y libegl1-mesa-dev libgbm-dev libgles2-mesa-dev libgles2-mesa
  1. 其他依赖库
sudo apt-get install -y libfreetype6-dev libicu-dev libsqlite3-dev libasound2-dev libnss3-dev \
libxss-dev libxtst-dev libpci-dev libcap-dev libsrtp0-dev libxrandr-dev libdirectfb-dev libaudio-dev \
libavcodec-dev libavformat-dev libswscale-dev libts-dev libfontconfig1-dev
sudo apt-get install -y libssl-dev libdbus-1-dev libglib2-dev rsyslog libjpeg-dev
  1. 开发工具
sudo apt-get install gcc g++ gdbserver rsync
02

源码配置

2.1 下载源码

从Qt官方网站下载Qt 5.12.8的源码包:

wget https://download.qt.io/new_archive/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8.tar.xz
tar -xf qt-everywhere-src-5.12.8.tar.xz
cd qt-everywhere-src-5.12.8

2.2 创建配置脚本

为了简化配置过程,建议创建一个auto.sh脚本:

sudo touch auto.sh
sudo chmod 755 auto.sh
sudo vim auto.sh

在auto.sh中添加以下内容:

#!/bin/bash
./configure -prefix /path/to/install \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-webengine-proprietary-codecs \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-skip qtgraphicaleffects \
-make libs \
-nomake tools \
-nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
-qt-zlib \
-no-vulkan \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-opengl es2 \
-xcb \
-xcb-xlib \
-egl \
-eglfs \
--pcre=qt \
-linuxfb \
-no-tslib \
-qt-libpng \
-qt-libjpeg \
--sqlite=qt

注意:

  • -prefix 指定安装路径
  • -xplatform 指定目标平台(例如:linux-aarch64-gnu-g++
  • -opensource-confirm-license 表示使用开源版本并同意许可证
  • -release 表示发布版本
  • -strip 表示去除调试信息
  • -shared 表示构建动态库
  • -optimized-qmake 表示优化qmake
  • -c++std c++11 指定C++标准
  • --rpath=no 禁用运行时路径
  • -pch 启用预编译头
  • -webengine-proprietary-codecs 启用专有编解码器
  • -skip 选项用于跳过不需要的模块
  • -make libs 只构建库
  • -nomake tools-nomake tests 不构建工具和测试
  • -gui-widgets 启用GUI和Widgets
  • -dbus-runtime 启用DBus运行时支持
  • --glib=no 禁用GLib
  • --iconv=no 禁用iconv
  • --pcre=qt 使用Qt内置的PCRE
  • -qt-zlib 使用Qt内置的zlib
  • -no-vulkan 禁用Vulkan
  • -no-openssl 禁用OpenSSL
  • --freetype=qt 使用Qt内置的FreeType
  • --harfbuzz=qt 使用Qt内置的HarfBuzz
  • -opengl es2 使用OpenGL ES 2.0
  • -xcb-xcb-xlib 启用XCB支持
  • -egl-eglfs 启用EGL支持
  • -linuxfb 启用Linux帧缓冲
  • -no-tslib 禁用TsLib
  • -qt-libpng-qt-libjpeg 使用Qt内置的PNG和JPEG库
  • --sqlite=qt 使用Qt内置的SQLite
03

编译与部署

3.1 编译

运行配置脚本:

sh auto.sh

配置完成后,开始编译:

make -j$(nproc)

3.2 创建sysroot目录

为了确保编译后的程序能够在目标设备上正确运行,需要创建一个与目标设备文件系统结构相同的sysroot目录。可以通过以下方式创建:

  1. 直接复制文件系统

将目标设备的根文件系统完整复制到sysroot目录下。例如:

sudo rsync -avz --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /path/to/target/rootfs /path/to/sysroot
  1. 使用工具生成sysroot

可以使用buildrootYocto Project等工具生成sysroot目录。

3.3 部署

将编译好的Qt库和应用程序部署到目标设备:

scp -r /path/to/install root@target:/usr/local

或者使用USB等物理介质传输。

04

常见问题与解决方案

  1. 缺少依赖库

如果在配置或编译过程中遇到"missing dependency"的错误,需要检查sysroot目录是否完整,或者目标设备上是否缺少必要的库。

  1. 工具链版本不匹配

确保使用的交叉编译工具链版本与目标设备的系统版本相匹配。例如,Bullseye工具链用于Debian 11系统。

  1. 环境变量未设置

确认交叉编译器路径已正确添加到系统环境变量中。

  1. 配置参数错误

仔细检查auto.sh脚本中的配置参数,确保所有选项都符合实际需求。

通过以上步骤,你应该能够成功完成Qt 5.12.8的交叉编译,并将其部署到嵌入式Linux设备上。虽然过程可能有些复杂,但掌握了这些步骤后,你就能在各种嵌入式平台上开发出功能强大的Qt应用程序了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号