参考:

QT 下载地址


环境:

ubuntu16.04(虚拟机)

QT版本:qt-everywhere-src-5.12.9

运行架构:ARMV7 / CSKY


下文记录的交叉编译的目标运行架构为 ARMV7,同时也实验过 CSKY 架构,CSKY 架构的交叉编译过程大致一致,些许不同会在文中提出。

对于 ubuntu 的环境差异,由于我使用时的 ubuntu 环境并不纯净,所以下文不涉及 ubuntu 环境方面的配置。

1:修改 qmake.conf 文件

解压 QT 源码包后,其中会包含许多功能包,最基本也是最核心的 qtbase 包肯定是要交叉编译的。首先需要修改或新增 qmake.conf 文件。在 qtbase/mkspecs/ 目录下的各文件中都会存在 qmake.conf 文件。这个 qmake.conf 文件在随后配置 configure 时会用到。

交叉编译 ARM 架构时,修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 即可。

交叉编译 CSKY 架构时,由于在 qtbase/mkspecs/ 下并没有合适的文件。所以参考 "linux-arm-gnueabi-g++" 文件新建了一个名为 "linux-csky-g++" 的文件。只需要修改 qmake.conf 文件。

ARMV7 架构修改 qmake.conf 如下:

  1 #2 # qmake configuration for building with arm-linux-gnueabi-g++3 #4 5 MAKEFILE_GENERATOR      = UNIX6 CONFIG                 += incremental7 QMAKE_INCREMENTAL_STYLE = sublib8 9 QT_QPA_DEFAULT_PLATFORM = linuxfb10 QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard11 QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard12 13 include(../common/linux.conf)14 include(../common/gcc-base-unix.conf)15 include(../common/g++-unix.conf)16 17 # modifications to g++.conf18 QMAKE_CC                = arm-linux-gnueabihf-gcc19 QMAKE_CXX               = arm-linux-gnueabihf-g++20 QMAKE_LINK              = arm-linux-gnueabihf-g++21 QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++22 23 # modifications to linux.conf24 QMAKE_AR                = arm-linux-gnueabihf-ar cqs25 QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy26 QMAKE_NM                = arm-linux-gnueabihf-nm -P27 QMAKE_STRIP             = arm-linux-gnueabihf-strip28 load(qt_config)29

其中  "QMAKE_CFLAGS" 变量可以指定交叉编译时 C 编译器 flag 参数,"QMAKE_CXXFLAGS" 变量设置 C++ 编译器 flag 参数,这个具体的参数赋值和交叉工具链有关。在 CSKY 架构的 qmake.conf 中,也可以利用 "QMAKE_CFLAGS",和 "QMAKE_CXXFLAGS" 变量来指定目标 SOC 运行的 CPU 核心类型,当然,前提是你手中CSKY 架构的 SOC 存在多个核心。其余的修改参考上述代码修改即可。

需要注意的是,工具链的路径已经加入到了环境变量之中,否则上述写法会找不到工具链。


2:利用 configure 脚本配置编译选项

配置很长,可以总结配置项,写一个编译脚本。我写的编译脚本内容如下,仅供参考。

  1 ./configure -prefix $(pwd)/arm-qt \2 -opensource \3 -confirm-license \4 -release \5 -strip \6 -shared \7 -xplatform linux-arm-gnueabi-g++ \8 -optimized-qmake \9 -c++std c++11 \10 --rpath=no \11 -pch \12 -skip qt3d \13 -skip qtactiveqt \14 -skip qtandroidextras \15 -skip qtcanvas3d \16 -skip qtconnectivity \17 -skip qtdatavis3d \18 -skip qtdoc \19 -skip qtgamepad \20 -skip qtlocation \21 -skip qtmacextras \22 -skip qtnetworkauth \23 -skip qtpurchasing \24 -skip qtremoteobjects \25 -skip qtscript \26 -skip qtscxml \27 -skip qtsensors \28 -skip qtspeech \29 -skip qtsvg \30 -skip qttools \31 -skip qttranslations \32 -skip qtwayland \33 -skip qtwebengine \34 -skip qtwebview \35 -skip qtwinextras \36 -skip qtx11extras \37 -skip qtxmlpatterns \38 -make libs \39 -make examples \40 -nomake tools -nomake tests \41 -gui \42 -widgets \43 -dbus-runtime \44 --glib=no \45 --iconv=no \46 --pcre=qt \47 --zlib=qt \48 -no-openssl \49 --freetype=qt \50 --harfbuzz=qt \51 -no-opengl \52 -linuxfb \53 --xcb=no \54 -tslib \55 --libpng=qt \56 --libjpeg=qt \57 --sqlite=qt \58 -plugin-sql-sqlite \59 -no-tslib \60 -recheck-all

其中 -xplatform 参数指定上述修改 qmake.conf 所在的文件夹。 -skip 参数可以跳过不编译相应的功能包,否则编译时间会很长。第 59 行的 -no-tslib 表示不支持 tslib 控件。若需要搭配 tslib 实现触摸功能,需要先交叉编译 tslib。然后使用 "-I" 参数指定交叉编译的 tslib 安装目录的 include 文件。使用 "-L" 参数指定交叉编译的 tslib 安装目录的 lib 文件。

然后执行编译脚本编译,注意 PC linux 中需要安装 g++ 。执行 sudo apt-get install g++ 即可。当出现 “Qt is now configure for building just run make” 提示后。就可以开始 make 编译源码了。


3:执行 make 开始编译

在执行 make 编译时,ARM 架构并未遇到什么问题,CSKY 架构有个地方会报错,报错信息如下:

error Target architecture was not detected as supported by Double-Conversion.

看提示信息是在 QT 源码中检测不到 CSKY 架构支持 Double-Conversion。这个问题可通过修改 QT 源码解决,在 qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h 文件中,在如下图所示位置增加 CSKY 的宏定义。

在 make 结束后,执行 make install 就会在 configure 配置时的 --prefix 参数指定的目录中安装交叉编译后的文件。


4:移植到根文件系统测试

我的根文件系统使用 buildroot 生成,当然,buildroot 也可以生成 QT。将上述交叉编译得到的 arm-qt 文件复制到 rootfs 的 /usr/lib/ 目录下,然后编辑 /etc/profile,加入如下内容,仅供参考。

 11 export QT_ROOT=/usr/lib/arm-qt12 export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event113 export QT_QPA_FONTDIR=/usr/share/fonts/liberation/14 export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb015 export QT_PLUGIN_PATH=$QT_ROOT/plugins16 export QT_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms17 export QML2_IMPORT_PATH=$QT_ROOT/qml18 export QT_QPA_FB_TSLIB=119 20 export LD_LIBRARY_PATH=$PKG_CONFIG_PATH:\21 /usr/lib/arm-qt/lib

当在 rootfs 中指定完 QT 的环境变量后,需要刷新 /etc/profile 文件,使用 source /etc/profile 命令即可刷新。然后便可以执行 QT 自带的演示程序来判断是否正确移植。路径如下

/usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles 

QT 交叉编译 ARM / CSKY相关推荐

  1. DM8168 --交叉编译ARM版 Qt (qt-everywhere-opensource-src-4.8.4)

    因实际项目需求,需将Qt编译成LINUX-ARM版,以下为整个操作过程,使用Qt编写的程序已在实际开发板上运行,在此贴出,但愿能为需要的朋友提供上帮助. 准备工作: Linux内核版本:        ...

  2. linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程

    LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...

  3. 基于 QT 嵌入式ARM数据采集卡上位机(一)

    基于 QT 嵌入式ARM数据采集卡上位机(一) 下一篇<基于 QT 嵌入式ARM数据采集卡上位机(二)-- 页面布局> 由于自己最近较为闲,刚好手上有设备,所以在业余时间编写了一个上位机和 ...

  4. 在Linux下搭建嵌入式Qt交叉编译环境[转载]

    Qt是嵌入式平台常用的GUI库,具有丰富的控件与开发资料.本文介绍如何在x86计算机上搭建ARM开发环境,并交叉编译ARM平台上运行的Demo. 准备 下载交叉编译器 下载Linaro公司推出的的ar ...

  5. QT笔记--嵌入式QT交叉编译与移植(含OpenGL ES2)

    介绍 本文记录了QT交叉编译并移植到开发板的过程,并在虚拟机上用QTcreater 开发程序,到开发板上运行.其中重点解决了一些过程中的BUG和坑. 准备工作 1.一个ubuntu系统的电脑(或虚拟机 ...

  6. 交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块

    前不久导师要求交叉编译一个基于arm平台开发的内核模块来练手,在网上查了很多资料才弄出来,于是将这些零散的信息综合起来给和我一样的入门人员了解.水平有限,请谅解~ 1.安装arm-none-linux ...

  7. openssl交叉编译arm

    1.交叉编译arm环境的openssl 修改config文件: 因为芯片架构为armv7,所以添加" GUESSOS="armv7-generic-linux2" &qu ...

  8. 在windows上,用cmake 交叉编译arm程序

    在windows上,用cmake 交叉编译arm程序.生成器用nijia(或用MinGW,此时, cmake执行时,指定生成器为 -G "MinGW Makefiles", 编译用 ...

  9. 使用Rust交叉编译arm程序

    作者: 刘天明 邮箱: bellskinling@gmail.com 博客链接: http://blog.csdn.net/bellskinling 转载请注明出处. 接上文, 有了支持arm版本的R ...

最新文章

  1. 为UC做准备:部署Exchange 2010及SP1
  2. imagesc demo
  3. 洛谷P4555 [国家集训队]最长双回文串(manacher 线段树)
  4. Hadoop权威指南 _04_第I部分Hadoop基础知识_第2章关于MapReduce
  5. float型y取值在1.0c语言表达式,2011年全国计算机二级C语言模拟试题及答案(14)...
  6. 【CodeForces - 527C】Glass Carving(线段树或者SBT或者set)
  7. 2020-2021家居行业年度盘点与趋势洞察
  8. 红外接收头图片_常见红外接收头引脚型号及测量代换
  9. js实现类似jquery基础功能 简单选择器/事件/属性
  10. java枚举菜鸟教程_Java教程--枚举类型使用方法详细讲解
  11. mysql数据库安装时的默认端口_数据库默认端口号
  12. ADS2015安装包和教程
  13. 上海达内python 培训视频
  14. 计算机故障排除原则和方法
  15. 计算机apk文件无法打开,【电脑怎么打开apk文件】电脑如何打开apk文件_电脑上怎么打开apk-系统城...
  16. POTN——新时代网络融合的必经之路
  17. 软考高级信息系统项目管理师必备知识点(记忆敲出)
  18. 学术论文中常用简写(缩写)汇总
  19. map之containsKey方法
  20. B站马士兵python入门基础版详细笔记(4)

热门文章

  1. ARM GICv3 ITS介绍及代码分析
  2. linux 软件安装笔记
  3. php银联支付接口 demo,php版银联支付接口开发简单实例详解
  4. 学习笔记-B/S - Exploits
  5. 逆水寒服务器维护公告,《逆水寒》2018年11月29日更新公告
  6. PTA 租用游艇问题
  7. 工作十年之感悟 -- 兼谈生活与人生
  8. Java返回报文有单双引号_Spring MVC 响应结果有反斜杠转义字符+双引号
  9. 猿编程python_猿编程下载-猿编程客户端 v2.12.0.1103 官方版 - 安下载
  10. 诠释绿色科技 Laedana荣获2022国际CMF设计奖