0


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-libpngCreating qmake....Done.Info: creating stash file /opt/qt-everywhere-src-5.15.2/.qmake.stashThis 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# makecd 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.cachemake[1]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase”cd src/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/src.pro )&& make -f Makefile make[2]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src”cd corelib/&&( test -e Makefile.qtzlib ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile.qtzlib /opt/qt-everywhere-src-5.15.2/qtbase/src/corelib/qtzlib.pro )&& make -f Makefile.qtzlib make[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/corelib”make[3]: 对“first”无需做任何事。make[3]: 离开目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/corelib”cd tools/bootstrap/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/tools/bootstrap/bootstrap.pro )&& make -f Makefile make[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/bootstrap”g++-c -pipe -O2 -fPIC -std=c++11-ffunction-sections -fdata-sections -fno-exceptions -Wall -Wextra -D_REENTRANT -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_VERSION_STR='"5.15.2"'-DQT_VERSION_MAJOR=5-DQT_VERSION_MINOR=15-DQT_VERSION_PATCH=2-DQT_BOOTSTRAPPED -DQT_NO_CAST_TO_ASCII -DQT_NO_FOREACH -DQT_NO_CAST_FROM_ASCII -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_BOOTSTRAP_LIB -DQT_BUILDING_QT -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000-DQT_DEPRECATED_WARNINGS_SINCE=0x060000-DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -I.-I../../3rdparty/zlib/src -I../../tools -I../../3rdparty/tinycbor/src -I../../../include -I../../../include/QtCore -I../../../include/QtCore/5.15.2-I../../../include/QtCore/5.15.2/QtCore -I../../../include/QtXml -I../../../include/QtXml/5.15.2-I../../../include/QtXml/5.15.2/QtXml -I../../../mkspecs/linux-g++-o .obj/qlatincodec.o ../../corelib/codecs/qlatincodec.cpp.........很长
  6. 安装:make install``````root@ubuntu:/opt/qt-everywhere-src-5.15.2# make installcd 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 installmake[1]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase”cd src/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/src.pro )&& make -f Makefile installmake[2]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src”cd corelib/&&( test -e Makefile.qtzlib ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile.qtzlib /opt/qt-everywhere-src-5.15.2/qtbase/src/corelib/qtzlib.pro )&& make -f Makefile.qtzlib installmake[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/corelib”sed -e 's,/opt/qt-everywhere-src-5.15.2/[^/][^/]*/lib,$$[QT_INSTALL_LIBS],g' -e 's,/opt/qt-arm/lib,$$[QT_INSTALL_LIBS],g'../../lib/libQt5Zlib.prl >/opt/qt-arm/lib/libQt5Zlib.prlsed -e 's,/opt/qt-everywhere-src-5.15.2/[^/][^/]*/lib,=/opt/qt-arm/lib,g'../../lib/Qt5Zlib.la >/opt/qt-arm/lib/Qt5Zlib.la/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/src/3rdparty/zlib/src/zconf.h /opt/qt-arm/include/QtZlib/zconf.h/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/src/3rdparty/zlib/src/zlib.h /opt/qt-arm/include/QtZlib/zlib.h/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/mkspecs/modules-inst/qt_lib_zlib_private.pri /opt/qt-arm/mkspecs/modules/qt_lib_zlib_private.pri/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/lib/cmake/Qt5Zlib/Qt5ZlibConfig.cmake /opt/qt-arm/lib/cmake/Qt5Zlib/Qt5ZlibConfig.cmake/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/lib/cmake/Qt5Zlib/Qt5ZlibConfigVersion.cmake /opt/qt-arm/lib/cmake/Qt5Zlib/Qt5ZlibConfigVersion.cmakemake[3]: 离开目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/corelib”cd tools/bootstrap/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/tools/bootstrap/bootstrap.pro )&& make -f Makefile installmake[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/bootstrap”/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall ../../../lib/libQt5Bootstrap.a /opt/qt-arm/lib/libQt5Bootstrap.ased -e 's,/opt/qt-everywhere-src-5.15.2/[^/][^/]*/lib,$$[QT_HOST_LIBS],g' -e 's,/opt/qt-arm/lib,$$[QT_HOST_LIBS],g'../../../lib/libQt5Bootstrap.prl >/opt/qt-arm/lib/libQt5Bootstrap.prlsed -e 's,/opt/qt-everywhere-src-5.15.2/[^/][^/]*/lib,/opt/qt-arm/lib,g'../../../lib/libQt5Bootstrap.la >/opt/qt-arm/lib/libQt5Bootstrap.la/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall /opt/qt-everywhere-src-5.15.2/qtbase/mkspecs/modules-inst/qt_lib_bootstrap_private.pri /opt/qt-arm/mkspecs/modules/qt_lib_bootstrap_private.primake[3]: 离开目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/bootstrap”cd tools/moc/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/tools/moc/moc.pro )&& make -f Makefile installmake[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/moc”/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall -exe ../../../bin/moc /opt/qt-arm/bin/mocstrip /opt/qt-arm/bin/mocmake[3]: 离开目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/moc”cd tools/rcc/&&( test -e Makefile ||/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -o Makefile /opt/qt-everywhere-src-5.15.2/qtbase/src/tools/rcc/rcc.pro )&& make -f Makefile installmake[3]: 进入目录“/opt/qt-everywhere-src-5.15.2/qtbase/src/tools/rcc”/opt/qt-everywhere-src-5.15.2/qtbase/bin/qmake -install qinstall -exe ../../../bin/rcc /opt/qt-arm/bin/rccstrip /opt/qt-arm/bin/rcc......很长

详细内容可参考交叉编译 Qt5.12.8

二、ARM开发板上环境变量设置

  将编译好的程序打包发送到开发板,在开发板上需通过两个命令来设置环境变量:

vim ~/.bashrc

在这里插入图片描述

vim /etc/profile

在这里插入图片描述

标签: ubuntu linux 运维

本文转载自: https://blog.csdn.net/zwcslj/article/details/136728332
版权归原作者 嵌入式_晚风 所有, 如有侵权,请联系我们删除。

“ubuntu20.04 | 交叉编译QT5.15.2 | ARM开发板上环境变量设置”的评论:

还没有评论