当前位置:   article > 正文

Qt5.12.11交叉编译+64位ARM_aarch64+全志H5 CortexA53_qt5.12 arm 交叉编译

qt5.12 arm 交叉编译

1、准备工作

     购买的H5开发板,附带资料里面只有关于qt4.8的支持,Qt5新增了很多插件,为了在H5上运行Qt5的程序,需要交叉编译Qt5版本的源码,记录下编译Qt5.12.11版本的源码交叉编译。

硬件:NanoPi K1 Plus,采用H5芯片,ARMv8架构,aarch64指令集。

Qt版本5.12.11:下载地址,https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.12/5.12.11/single/qt-everywhere-src-5.12.11.tar.xz

虚拟机:Ubuntu20.04LTS 桌面版。

交叉编译器:https://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/aarch64-linux-gnu/

我编译了Qt5.12.9和Qt5.12.11两个版本的源码,方法一样,最后都能运行在开发板上。

2、安装交叉编译工具

    将交叉编译工具压缩包gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar拷贝到虚拟机目录下,我使用的是Xftp这个工具。然后使用tar命令解压缩,然后添加到环境变量中,添加到/etc/profile目录下,使用source  /etc/profile命令,使环境变量生效,然后使用aarch64-linux-gnu-gcc -v命令查看工具是否安装成功,也可以将环境变量添加到当前用户的家目录的的.bashrc目录下。

在/etc/profile文件的最后添加交叉编译工具安装路径,使用source /etc/profile命令生效环境变量。

3、修改qmake.conf文件

      将第一步下载的Qt源码移动到虚拟机中自己新建的文件夹中,我新建的Qt源码存放路径为/opt/qt5.12.11。不同的硬件架构对应不同的qmake.conf,在下载的Qt5.12.11源码中的qtbase/mkspecs/目录下有各种不同的平台,H5使用的是linux-aarch64-gun-g++目录下的qmake配置文件,我们先拷贝一个这个文件的备份,在备份文件中修改qmake.conf。将linux-aarch64-gun-g++这个目录拷贝到与这个文件同一目录下的aarch64目录,如下图所示。

  1. #
  2. # qmake configuration for building with aarch64-linux-gnu-g++
  3. #
  4. MAKEFILE_GENERATOR = UNIX
  5. CONFIG += incremental
  6. QMAKE_INCREMENTAL_STYLE = sublib
  7. QT_QPA_DEFAULT_PLATFORM=linuxfb
  8. QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
  9. QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts
  10. include(../common/linux.conf)
  11. include(../common/gcc-base-unix.conf)
  12. include(../common/g++-unix.conf)
  13. # modifications to g++.conf
  14. QMAKE_CC =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
  15. QMAKE_CXX =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
  16. QMAKE_LINK =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
  17. QMAKE_LINK_SHLIB =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
  18. # modifications to linux.conf
  19. QMAKE_AR =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
  20. QMAKE_OBJCOPY =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
  21. QMAKE_NM =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
  22. QMAKE_STRIP =/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
  23. load(qt_config)

上图为Qt源码文件夹中qtbase/mkspecs/aarch64/qmake.conf文件内容。为了避免修改错误aarch64为拷贝的qtbase/mkspecs/aarch64/linux-aarch64-gun-g++文件。

4、配置编译选项

在解压的Qt5.12.11源码目录下使用./configure -help命令,可以查看编译配置选项。一般将需要编译的内容添加到一个shell脚本中,在源码的顶层目录下新增autoconfigure.sh这个文件的名称可以随便定义。下面为文件的内容。

  1. ./configure -prefix /opt/qt5.12.11/qt/arm-qt \ 这个路径是我们自己新建的目录,编译后的文件就会在这个目录下面,如果拷贝时需要删除汉字的注释
  2. -opensource -confirm-license \
  3. -release \
  4. -strip \
  5. -shared \
  6. -xplatform aarch64 \ 这是我们之前修改的qmake.conf文件的目录名称,如果需要拷贝需要删除汉字注释
  7. -optimized-qmake \
  8. -c++std c++11 \
  9. --rpath=no \
  10. -pch \
  11. -skip qt3d \
  12. -skip qtactiveqt \
  13. -skip qtandroidextras \
  14. -skip qtcanvas3d \
  15. -skip qtconnectivity \
  16. -skip qtdatavis3d \
  17. -skip qtdoc \
  18. -skip qtgamepad \
  19. -skip qtlocation \
  20. -skip qtmacextras \
  21. -skip qtnetworkauth \
  22. -skip qtpurchasing \
  23. -skip qtremoteobjects \
  24. -skip qtscript \
  25. -skip qtscxml \
  26. -skip qtsensors \
  27. -skip qtspeech \
  28. -skip qtsvg \
  29. -skip qttools \
  30. -skip qttranslations \
  31. -skip qtwayland \
  32. -skip qtwebengine \
  33. -skip qtwebview \
  34. -skip qtwinextras \
  35. -skip qtx11extras \
  36. -skip qtxmlpatterns \
  37. -make libs \
  38. -make examples \
  39. -nomake tools -nomake tests \
  40. -gui \
  41. -widgets \
  42. -dbus-runtime \
  43. --glib=no \
  44. --iconv=no \
  45. --pcre=qt \
  46. --zlib=qt \
  47. -no-openssl \
  48. --freetype=qt \
  49. --harfbuzz=qt \
  50. -no-opengl \
  51. -linuxfb \
  52. --xcb=no \
  53. --libpng=qt \
  54. --libjpeg=qt \
  55. --sqlite=qt \
  56. -plugin-sql-sqlite \
  57. -recheck-all

在autoconfigure.sh中添加上面的内容后,给文件使用chmod 777 autoconfigure.sh给文件添加执行的权限,然后运行./autoconfigure,生成makefile文件。

如果配置编译选项没有错误,运行了autoconfigure.sh文件后没有错误就会出现类似上图的显示,如果没有出现,可能是autoconfigure.sh文件错误,我当时也是拷贝的别人的文件,结果很多不能被识别的字符,格式需要注意。

5、make

运行了.autocinfigure.sh文件后,就可以执行make命令了。根据机器的配置不同,不同的机器make的时间不同。我使用time (make -j16)命令执行make,time可以测试make所消耗的时间。

6、make install

make完成后就可以执行make install命令了,make install命令执行完之后就能在我们新建的arm-qt目录下面生成在可以再我们目标开发板上运行的qt环境了,将这个arm-qt文件,全部拷贝到目标开发板上,然后添加qt5运行的环境就能运行qt5的程序了。

上图中显示的目录就是我们最后编译出来的文件,将这个文件夹拷贝到开发板中,我使用的是nfs方式拷贝到开发板的。

7、开发板中运行

上图是通过串口与开发板通信,显示的目录为之前编译出来的arm-qt目录。在开发板的/etc/profile文件的最后添加Qt运行的环境变量。

  1. export QT_ROOT=/usr/lib/arm-qt #虚拟机中编译出来的arm-qt文件,根据自己的目录来填写
  2. export QT_QPA_FONTDIR=/usr/share/fonts #字体的目录,如果Qt中有中文显示,需要拷贝电脑C盘中的字体文件到这个目录下面
  3. export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins#Qt支持的插件
  4. export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
  5. export QT_PLUGIN_PATH=$QT_ROOT/plugins
  6. export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
  7. export QML2_IMPORT_PATH=$QT_ROOT/qml

我的开发板没有触摸的显示屏,我使用的是HDMI接口连接的显示器,现在我们可以运行编译出来的目录下面的examples下面的文件,现在运行下图目录下的文件。

上图就是运行/arm-qt/examples/widgets/animation/animatedtiles目录下的animatedtiles可执行文件。上图

上图是运行arm-qt/examples/charts/areachart目录下的areachart可执行文件后的效果。

开发板的Qt5环境就搭建好了,就可以在Ubuntu下面使用QtCreator编写Qt程序,然后使用我们编译出来的qmke及交叉编译工具编译开发板上能运行的程序了,下一天记录下载Ubuntu20.4下面编写一个简单的程序,然后运行在开发板上的例子。下面是我的开发板。

如果有问题欢迎大家一起讨论,谢谢大家的支持。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/235023?site
推荐阅读
相关标签
  

闽ICP备14008679号