Ubuntu QT 交织编译情况搭建(超级具体)

打印 上一主题 下一主题

主题 1783|帖子 1783|积分 5349

1.准备工作(安装QT,下载交织编译工具,下载源码)

一 ,安装Qt

下载安装包地址:Qt5.12.9
https://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run这是官网下载地址,必要梯子访问,推荐复制链接到迅雷下载(非常快)
二 ,下载编译工具

交织编译工具下载地址:Linaro Releases

下载解压/opt目次下,后修改文件/etc/profile,添加交织编译工具路径

三 ,下载QT源码

下载地址:qt-everywhere-src-5.12.9.tar.xz
https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz
2.编写config脚本执行命令创建make(配置编译Qt源码编译方案)

方式一、选择只编译Qt的基础模块(主讲源码完备编译)

源码目次下有一个qtbase目次,该目次是Qt的基础模块目次,
该目次下同样有configure文件(在源码目次下也有一个configure配置文件,这两个文件不一样)
当我们在Qt源码目次下执行./configure命令时,可以配置团体编译方案,我们则可以在此处设置
想要编译构建的参数和模块。在/qtbase目次下,执行./configure命令时,配置的是在该目次下的Qt根本模块
   只编译构建qtbase,开发运行常见窗体应用是可以的
  目次下新建文件autoconfigure.sh,输入以下内容构建脚本
  1. #!/bin/sh
  2. ./configure \
  3.     -prefix /home/XXX/Downloads/qt-everywhere-src-5.14.1/arm-qt \
  4.     -confirm-license \
  5.     -opensource \
  6.     -shared \
  7.     -release \
  8.     -make libs \
  9.     -xplatform linux-arm-gnueabi-g++ \
  10.     -optimized-qmake \
  11.     -pch \
  12.     -qt-libjpeg \
  13.     -qt-libpng \
  14.     -qt-zlib \
  15.     -skip qtdeclarative \
  16.     -no-opengl \
  17.     -no-sse2 \
  18.     -no-openssl \
  19.     -no-cups \
  20.     -no-glib \
  21.     -no-dbus \
  22.     -no-xcb \
  23.     -no-separate-debug-info \
  24.     -no-fontconfig \
  25.     -nomake examples -nomake tools -nomake tests -no-iconv
  26. exit
复制代码
  -prefix:该参数用于指定Qt编译完成后安装时的输出目次。
  -xplatform:用于交织编译时选择目标mkspec。(需与qtbase/mkspec目次下的目次名称一样)
  编辑qt源码目次下qtbase/kspecs/linux-arm-gnueabi-g++下的 qmake.conf。注意: mkspecs 下有许多平台选择,阐明白 Qt 是跨平台的。之所以是选择 linux-arm-gnueabi-g++,这是由于前面autoconfigure.sh里的参数-xplatform 选择了 linux-arm-gnueabi-g++,具体操作在方式二里操作雷同

方式二、完备编译Qt源码

1.配置autoconfigure.sh文件

完备编译Qt源码指的是在Qt源码路径下进行编译,使用configure对Qt进行编译配置时指定必要编译的模块,在源码目次下新建文件autoconfigure.sh,输入以下内容
  1. #! /bin/sh
  2. ./configure -prefix /home/linux/work/qt-everywhere-src-5.12.9/arm-qt \  #编译安装的目录路径  
  3. -opensource \
  4. -confirm-license \
  5. -release \
  6. -strip \
  7. -shared \
  8. -xplatform linux-arm-gnueabi-g++ \
  9. -optimized-qmake \
  10. -c++std c++11 \
  11. --rpath=no \
  12. -pch \
  13. -skip qt3d \
  14. -skip qtactiveqt \
  15. -skip qtandroidextras \
  16. -skip qtcanvas3d \
  17. -skip qtconnectivity \
  18. -skip qtdatavis3d \
  19. -skip qtdoc \
  20. -skip qtgamepad \
  21. -skip qtlocation \
  22. -skip qtmacextras \
  23. -skip qtnetworkauth \
  24. -skip qtpurchasing \
  25. -skip qtremoteobjects \
  26. -skip qtscript \
  27. -skip qtscxml \
  28. -skip qtsensors \
  29. -skip qtspeech \
  30. -skip qtsvg \
  31. -skip qttools \
  32. -skip qttranslations \
  33. -skip qtwayland \
  34. -skip qtwebengine \
  35. -skip qtwebview \
  36. -skip qtwinextras \
  37. -skip qtx11extras \
  38. -skip qtxmlpatterns \
  39. -make libs \
  40. -make examples \
  41. -nomake tools -nomake tests \
  42. -gui \
  43. -widgets \
  44. -dbus-runtime \
  45. --glib=no \
  46. --iconv=no \
  47. --pcre=qt \
  48. --zlib=qt \
  49. -no-openssl \
  50. --freetype=qt \
  51. --harfbuzz=qt \
  52. -no-opengl \
  53. -linuxfb \
  54. --xcb=no \ -tslib \
  55. --libpng=qt \
  56. --libjpeg=qt \
  57. --sqlite=qt \
  58. -plugin-sql-sqlite \
  59. -I/home/Qt/tslib-1.21/arm-tslib/include \
  60. -L/home/Qt/tslib-1.21/arm-tslib/lib \
  61. -recheck-all
复制代码
  I/home/linux/work/tslib/arm-tslib/include \
  -L//home/linux/work/tslib/arm-tslib/lib \
  这个是嵌入式触摸屏的开源库,必要放我们本身编译的后Tslib库的路径(也可叫不加放到这里一起编译了)
   编译Tslib
1 获取 tslib
本文使用的是tslib-1.21
将tslib-1.21.tar.bz2解压
sudo tar -jxvf tslib-1.21.tar.bz2

   1.2 配置 tslib
  先安装 automake 工具
  sudo apt-get install autoconf automake libtool
  配置源码天生 Makefile
  ./autogen.sh
  1.3 配置交织编译工具
  新建一个文件夹,用于存放编译输出的内容,在当前目次下新建,执行下面的指令
  mkdir arm-tslib
  获取路径
  指定交织编译工具与输出路径指令为
  .
  1. /configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/work/third-party/tslib-1.21/arm-tslib
复制代码
这里的的arm-linux-gnueabihf 与-cache-file=arm-linux要与我们配置交差编译器名称雷同
  我的名称就是arm-none-linux-gnueabi,所以改为:
  ./configure --host=arm-none-linux-gnueabi ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-none-linux.cache -prefix=/home/linux/work/tslib/arm-tslib
  

  1.4 编译与安装
  执行make编译
  make -j2 //加参数-j2 是最多允许 2 条编译指令同时进行
  编译完成
  执行 make install 指令进行安装
  make install
  安装完成
  

  将配置好的autoconfigure.sh文件添加可执行权限

2.配置qmake.conf文件

编辑qt源码目次下qtbase编辑 mkspecs/linux-arm-gnueabi-g++下的 qmake.conf
  1. #
  2. # qmake configuration for building with arm-linux-gnueabi-g++
  3. #
  4. MAKEFILE_GENERATOR      = UNIX
  5. CONFIG                 += incremental
  6. QMAKE_INCREMENTAL_STYLE = sublib
  7. include(../common/linux.conf)
  8. include(../common/gcc-base-unix.conf)
  9. include(../common/g++-unix.conf)
  10. #20250305 song
  11. QT_QPA_DEFAULT_PLATFORM = linuxfb
  12. #该配置指定了Qt使用Linux Framebuffer(LinuxFB)作为默认的图形后端,适用于无X服务器或硬件加速的嵌入式环境。
  13. #LinuxFB直接操作帧缓冲设备实现图形输出,需确保设备节点(如/dev/fb0)存在且权限正常
  14. QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
  15. QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
  16. #-O2:启用二级优化,提升代码执行效率。
  17. #-march=armv7-a:指定目标CPU架构为ARMv7-A系列。
  18. #-mtune=cortex-a7:针对Cortex-A7内核进行指令调度优化。
  19. #-mfpu=neon:启用NEON SIMD指令集加速图形和信号处理。
  20. #-mfloat-abi=hard:使用硬件浮点运算(需CPU支持VFPv3-D16)。
  21. #改为下载的交叉编译器目录
  22. # modifications to g++.conf
  23. QMAKE_CC                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-gcc
  24. QMAKE_CXX               = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++
  25. QMAKE_LINK              = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++
  26. QMAKE_LINK_SHLIB        = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++
  27. # modifications to linux.conf
  28. QMAKE_AR                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-ar cqs
  29. QMAKE_OBJCOPY           = /opt/arm-2014.05/bin/arm-linux-gnueabihf-objcopy
  30. QMAKE_NM                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-nm -P
  31. QMAKE_STRIP             = /opt/arm-2014.05/bin/arm-linux-gnueabihf-strip
  32. QMAKE_INCDIR += /home/linux/work/tslib/arm-tslib/include
  33. QMAKE_LIBDIR += /home/linux/work/tslib/arm-tslib/lib
  34. load(qt_config)
复制代码
3.执行 autoconfigure.sh 配置


这里碰到一个几个大坑在执行autoconfigure.sh时要注意文件的编码格式,最好保存为UTF-8格式不然报错

还有openGL模块要在autoconfigure.sh配置-no-opengl不然报错

出现Just run make构建乐成

3.执行make编译


报错在交织编译目次下没有 gun/stubs-hard文件,我们在qmake.conf文件里指定了-mfloat-abi=hard:使用硬件浮点运算,但是我的目次下没有这个文件,原因是我使用交织编译器是arm-linux-guneabi他是不带这个文件夹的
具体链接

办理方法在qmake.conf去掉-mfloat-abi=hard

继续make乐成编译
4.执行 make install 安装


5.安装结果



6.在Qt Creator添加交织编译,创建套件

ubuntu搭建qt交织编译情况_qt交织编译情况搭建_²º²²এ松的博客-CSDN博客
7.完成搭建

构建套件完成


构建交织编译步伐天生乐成

参考文章:


  • armlinux 移植qt
  • ubuntu搭建qt交织编译情况
  • 将qt步伐交织编译到arm架构上香奈儿的技术博客_51CTO博客
  • ubuntu搭建qt的arm交织编译情况_qt交织编译情况搭建-CSDN博客
  • Ubuntu QT 交织编译情况搭建_qt交织编译情况搭建-CSDN博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表