ubuntu20.04 | 交叉编译QT5.15.2 | ARM开发板上环境变量设置


  PC端(与开发板系统一致,一般由开发板厂商提供虚拟机)来交叉编译程序。

一、交叉编译QT5.15.2

  qt源码也需要交叉编译,交叉编译时有些模块会报错,当这些模块在程序中用不到时,可以忽略这些模块。
交叉编译步骤如下:

  1. 安装交叉编译器,(一般这一步可省略,因为使用的是开发板厂商提供的虚拟机,里面已安装好交叉编译器,虚拟机中的交叉编译器与开发板中的交叉编译器一致)

    ##安装 g++-aarch64-linux-gnu 交叉编译器
    $sudo apt install g++-aarch64-linux-gnu #安装
    $aarch64-linux-gnu-g++ -v  #查看默认安装的gcc版本
    

    在这里插入图片描述

  2. 将要编译的qt-5.15.2源码下载下来,并移动到/opt文件夹
    在这里插入图片描述

  3. 在qt源码根目录下制作编译脚本:autoConfig.sh,并修改文件权限:chmod 777 autoConfig.sh

    ./configure \
    -prefix /opt/qt-arm \
    -release \
    -opensource \
    -skip qtwayland \
    -skip qtlocation \
    -skip qtscript \
    -xplatform linux-aarch64-gnu-g++ \
    -make libs \
    -optimized-qmake \
    -no-opengl \
    -no-sse2 \
    -no-openssl \
    -no-cups \
    -no-glib \
    -no-pkg-config \
    -no-separate-debug-info \
    -pch \
    -shared \
    -qt-libjpeg \
    -qt-zlib \
    -qt-libpng
    
    • -prefix <dir> :指定安装目录
    • -release :此选项在编译过程QT会对程序进行优化,在发布软件的时候应该用此选项,是默认选项
    • -opensource:以开源版本发布程序
    • -skip:用于指定跳过某些模块的编译过程
    • -xplatform:交叉编译过程指定目标平台
    • -make libs:用于指定只编译Qt库而不编译Qt应用程序。这样可以节省编译时间和资源,并且可以方便地将编译好的Qt库集成到目标平台的开发环境中。
    • -optimized-qmake:开启qmake的优化作用
    • -no-opengl:表示禁用OpenGL支持。OpenGL是一种跨平台的图形库,用于渲染2D和3D图形。禁用OpenGL意味着Qt将不会使用OpenGL进行图形渲染,而是使用其他的图形渲染方式。
    • -no-sse2:表示禁用SSE2指令集的优化。SSE2(Streaming SIMD Extensions 2)是一组SIMD(单指令多数据)指令,用于加速处理器对多个数据的并行处理。禁用SSE2意味着编译的Qt库将不会使用SSE2指令集进行优化,这可能会导致一些性能上的损失,但也可以确保生成的二进制文件在不支持SSE2指令集的处理器上能够正常运行。
    • -no-openssl:表示不包含OpenSSL库。OpenSSL是一个开源的加密和安全套接字层库,用于提供网络通信的安全性。通过使用"-no-openssl"选项,可以在编译Qt时排除对OpenSSL库的依赖,从而减小生成的Qt库的大小。
    • -no-cups:表示不包含CUPS(通用UNIX打印系统)支持。CUPS是一种开源的打印系统,用于在UNIX和类UNIX操作系统上提供打印功能。通过使用"-no-cups"选项,可以在编译QT时排除CUPS相关的代码和依赖库,从而减小生成的QT库的大小。
    • -no-glib:表示不使用GLib库。GLib是一个C语言的通用工具库,它提供了许多数据结构、线程支持、内存管理等功能。在默认情况下,Qt会使用GLib库来提供一些跨平台的功能。
      使用"-no-glib"选项的目的是在交叉编译Qt时排除GLib库的依赖,从而减小生成的Qt库的体积,并且避免与其他可能已经存在的GLib版本冲突。
    • -no-pkg-config:表示禁用pkg-config工具的使用。pkg-config是一个用于查询和获取编译和链接库信息的工具,它可以帮助自动配置编译器和链接器的选项。
      使用"-no-pkg-config"选项的目的是告诉Qt编译系统不要使用pkg-config来查找和配置依赖库。
    • -no-separate-debug-info:在编译Qt时不生成独立的调试信息文件。通常情况下,编译生成的可执行文件和调试信息是分开存储的,可执行文件用于运行程序,而调试信息文件用于调试程序。但是在某些情况下,我们可能希望将调试信息直接嵌入到可执行文件中,而不是生成独立的调试信息文件。
    • -pch:它代表"precompiled headers",即预编译头文件。预编译头文件是为了提高编译速度而引入的一种机制。
      在编译大型项目时,头文件的包含关系可能非常复杂,每次编译都需要重新解析和编译这些头文件,导致编译时间较长。为了解决这个问题,可以使用预编译头文件的方式。
      预编译头文件的原理是将常用的头文件预先编译成二进制文件,并在后续的编译过程中直接使用这个二进制文件,避免了重复解析和编译头文件的过程,从而提高了编译速度。
      在交叉编译Qt时,使用-pch选项可以启用预编译头文件的功能。通过预先生成并使用预编译头文件,可以加快Qt库的编译速度,特别是在资源有限的嵌入式系统上。
    • -shared:使用-shared选项编译Qt时,会生成一个共享库文件,其中包含了Qt框架的函数和资源。
      共享库的好处是可以减小应用程序的体积,因为多个应用程序可以共享同一个库文件。此外,共享库还可以动态加载和卸载,使得应用程序更加灵活和可扩展。
    • -qt-libjpeg:用于指定是否使用libjpeg库来支持JPEG图像格式。libjpeg是一个开源的JPEG图像压缩和解压缩库,它提供了对JPEG图像的编码和解码功能。
    • -qt-zlib:用于指定是否使用系统的zlib库还是Qt自带的zlib库。
      使用-qt-zlib选项可以方便地控制Qt在编译过程中使用哪个zlib库。如果选择使用Qt自带的zlib库,可以确保在不同平台上的一致性和可移植性。而如果选择使用系统中已安装的zlib库,可以避免重复编译和依赖管理的问题。
    • -qt-libpng:用于指定是否使用libpng库来支持PNG图像格式。libpng是一个用于处理PNG图像的开源库,它提供了读取、写入和操作PNG图像的功能。

    qt交叉编译参数介绍

  4. 运行该编译脚本

    root@ubuntu:/opt/qt-everywhere-src-5.15.2# ./autoConfig.sh 
    + cd qtbase
    + /opt/qt-everywhere-src-5.15.2/qtbase/configure -top-level -prefix /opt/qt-arm -release -opensource -skip qtwayland -skip qtlocation -skip qtscript -xplatform linux-aarch64-gnu-g++ -make libs -optimized-qmake -no-opengl -no-sse2 -no-openssl -no-cups -no-glib -no-pkg-config -no-separate-debug-info -pch -shared -qt-libjpeg -qt-zlib -qt-libpng
    Creating qmake...
    .Done.
    Info: creating stash file /opt/qt-everywhere-src-5.15.2/.qmake.stash
    
    This is the Qt Open Source Edition.
     
    You are licensed to use this software under the terms of
    ...
    
  5. 构建:make,耗时很长

    root@ubuntu:/opt/qt-everywhere-src-5.15.2# make
    cd qtbase/ && ( test -e Makefile || /opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/qtbase.pro ) && make -f Makefile 
    Info: creating cache file /opt/qt-everywhere-src-5.15.2/qtbase/.qmake.cache
    make[1]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase”
    cd src/ && ( test -e Makefile || 
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值