Ubuntu QT 交叉编译环境搭建(超级详细)

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

一 ,安装Qt

下载安装包地址:Qt5.12.9https://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.xzhttps://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,输入以下内容构建脚本

#!/bin/sh
./configure \
    -prefix /home/XXX/Downloads/qt-everywhere-src-5.14.1/arm-qt \
    -confirm-license \
    -opensource \
    -shared \
    -release \
    -make libs \
    -xplatform linux-arm-gnueabi-g++ \
    -optimized-qmake \
    -pch \
    -qt-libjpeg \
    -qt-libpng \
    -qt-zlib \
    -skip qtdeclarative \
    -no-opengl \
    -no-sse2 \
    -no-openssl \
    -no-cups \
    -no-glib \
    -no-dbus \
    -no-xcb \
    -no-separate-debug-info \
    -no-fontconfig \
    -nomake examples -nomake tools -nomake tests -no-iconv
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,输入以下内容

#! /bin/sh
./configure -prefix /home/linux/work/qt-everywhere-src-5.12.9/arm-qt \  #编译安装的目录路径  
-opensource \ 
-confirm-license \ 
-release \ 
-strip \ 
-shared \ 
-xplatform linux-arm-gnueabi-g++ \ 
-optimized-qmake \ 
-c++std c++11 \
--rpath=no \ 
-pch \ 
-skip qt3d \ 
-skip qtactiveqt \ 
-skip qtandroidextras \ 
-skip qtcanvas3d \ 
-skip qtconnectivity \ 
-skip qtdatavis3d \ 
-skip qtdoc \ 
-skip qtgamepad \ 
-skip qtlocation \ 
-skip qtmacextras \ 
-skip qtnetworkauth \ 
-skip qtpurchasing \ 
-skip qtremoteobjects \ 
-skip qtscript \ 
-skip qtscxml \ 
-skip qtsensors \ 
-skip qtspeech \ 
-skip qtsvg \ 
-skip qttools \ 
-skip qttranslations \ 
-skip qtwayland \ 
-skip qtwebengine \ 
-skip qtwebview \ 
-skip qtwinextras \ 
-skip qtx11extras \ 
-skip qtxmlpatterns \ 
-make libs \ 
-make examples \ 
-nomake tools -nomake tests \ 
-gui \ 
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \ 
-no-openssl \
--freetype=qt \
--harfbuzz=qt \ 
-no-opengl \ 
-linuxfb \
--xcb=no \ -tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \ 
-plugin-sql-sqlite \ 
-I/home/Qt/tslib-1.21/arm-tslib/include \ 
-L/home/Qt/tslib-1.21/arm-tslib/lib \ 
-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

获取路径

指定交叉编译工具与输出路径指令为

.

/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

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

#20250305 song
QT_QPA_DEFAULT_PLATFORM = linuxfb
#该配置指定了Qt使用Linux Framebuffer(LinuxFB)作为默认的图形后端,适用于无X服务器或硬件加速的嵌入式环境。
#LinuxFB直接操作帧缓冲设备实现图形输出,需确保设备节点(如/dev/fb0)存在且权限正常

QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
#-O2:启用二级优化,提升代码执行效率。
#-march=armv7-a:指定目标CPU架构为ARMv7-A系列。
#-mtune=cortex-a7:针对Cortex-A7内核进行指令调度优化。
#-mfpu=neon:启用NEON SIMD指令集加速图形和信号处理。
#-mfloat-abi=hard:使用硬件浮点运算(需CPU支持VFPv3-D16)。

#改为下载的交叉编译器目录


# modifications to g++.conf
QMAKE_CC                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX               = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++
QMAKE_LINK              = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = /opt/arm-2014.05/bin/arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = /opt/arm-2014.05/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM                = /opt/arm-2014.05/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = /opt/arm-2014.05/bin/arm-linux-gnueabihf-strip

QMAKE_INCDIR += /home/linux/work/tslib/arm-tslib/include
QMAKE_LIBDIR += /home/linux/work/tslib/arm-tslib/lib
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他是不带这个文件夹的

更新2025.5.29:具体原因

笔者在实践操作中使用的是arm-linux-guneabi交叉编译工具,如果你按前文使用的是arm-linux-guneabihf应该不会出错

具体链接

解决方法在qmake.conf去掉-mfloat-abi=hard

继续make成功编译

4.执行 make install 安装

5.安装结果

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

ubuntu搭建qt交叉编译环境_qt交叉编译环境搭建_²º²²এ松的博客-优快云博客

7.完成搭建

构建套件完成

构建交叉编译程序生成成功

参考文章:

  1. armlinux 移植qt
  2. ubuntu搭建qt交叉编译环境
  3. 将qt程序交叉编译到arm架构上香奈儿的技术博客_51CTO博客
  4. ubuntu搭建qt的arm交叉编译环境_qt交叉编译环境搭建-优快云博客
  5. Ubuntu QT 交叉编译环境搭建_qt交叉编译环境搭建-优快云博客
### 设置和配置Qt交叉编译环境 #### 配置交叉编译工具链 为了使Qt能够识别目标平台的编译器和其他开发工具,在`qt-everywhere-src-5.12.9/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf`文件中,需修改编译器路径以及架构特定参数。具体来说,应将所有涉及`arm-linux-gnueabi-*`命令的地方替换为目标系统的实际路径,并确保使用的工具链支持硬浮点ABI(即`gnueabihf`),这有助于提高性能并兼容更多设备[^4]。 #### 启动Qt Creator 通过创建脚本简化启动过程是一个不错的选择。可以在服务器上建立一个名为`qtstart`的小型Shell脚本来快速启动Qt Creator IDE。该脚本定义了必要的环境变量,并调用了位于指定位置下的Qt Creator二进制文件: ```bash #!/bin/sh export QT_HOME=/opt/Qt5.12.9/Tools/QtCreator/bin $QT_HOME/qtcreator.sh & ``` 此方法不仅便于管理不同版本间的切换,还允许用户自定义其他初始化选项或加载项[^3]。 #### 解决常见错误提示 当遇到类似于“Qt version is not properly installed”的警告时,通常是因为缺少某些必需组件或是安装过程中出现了问题。此时应当按照官方文档指示完成整个安装流程,特别是不要遗漏执行`make install`这一关键步骤来正式部署Qt库到系统中去[^2]。 #### 在Qt Creator内配置项目属性 对于Ubuntu 22这样的桌面操作系统而言,要在其上面成功实现针对ARM架构的目标板卡的应用程序开发,则需要在Qt Creator内部调整相应的构建套件设置。这意味着要指明正确的QMake规格、编译器以及其他可能影响最终输出的因素。这部分操作可以通过图形界面直观地完成,只需遵循相关指南逐步设定即可[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值