WSL(Ubuntu22.04LTS) + qt5.12.0交叉编译环境搭建

环境

WSL (ubuntu22.04) 没有安装请搜索安装教程
qt 5.12.0 源代码压缩包 
下载链接: https://download.qt.io/archive/qt/5.12/5.12.0/single/

qt下载界面

选择 tar.xz结尾的压缩文件,

组件准备

***本教程默认使用root权限进行操作,因为编译qt源码后执行make时需要root 用户权限
且本教程所编译的qt源码不含OpenGL组件***

编译工具链

根据个人需求下载对应的交叉编译工具链
本文章使用arm-none-linux-gnueabi-gcc  编译工具链
首先更新软件仓库
apt update
apt upgrade
安装一个合适自己的编辑工具

这里我使用vim,因为会对部分qt源代码进行修改

apt install vim
下载交叉编译工具链

这里我使用arm-none-linux-gnueabi-gcc
下载编译工具链 ( gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz)

URL: https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz

解压目录并且设置环境变量

mkdir /usr/arm_none_linux && tar -vxf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar -C /usr/arm_none_linux/ 

根据需求设置环境变量

vim ~/.bashrc  #root下在这个目录里设置环境变量 会永久存在
#在此文件末尾添加
export PATH=$PATH:/usr/arm_none_linux/XXXXX/bin   #XXXX参考自己的/usr/arm_none_linux 路径

更新环境变量

source ~/.bashrc

检测是否成功安装

arm-none-linux-gnueabihf-g++ -v #C++交叉编译工具链
arm-none-linux-gnueabihf-gcc -v #C交叉编译工具链

也可以查看其余的交叉编译工具
语法遵循上述规律 在后面加选项 -v 即可
其余的交叉编译工具

下载CMake && make

通过命令行下载CMake

apt install cmake
安装qt支持

由于qt是一个由各种组件组成的框架,所以我们可以有选择性的安装每一个支持包,
安装qt基础支持包

sudo apt-get install build-essential perl python3 git

安装qt的xcb组件包

sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev

安装qt的webKit组件包

sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby

安装qt WebEngine组件

sudo apt-get install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs

安装 qt Multimedia组件

sudo apt-get install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev

映射已安装的python

sudo ln -s /usr/bin/python3 /usr/bin/python
交叉编译openssl

去官方下载压缩包
https://www.openssl.org/source/old/1.1.1/index.html
在这里插入图片描述
解压缩后产生以下文件:
在这里插入图片描述

在这个目录下执行以下命令

注意最后的 arm-none-linux-gnueabihf- 这是前面安装的交叉编译工具 ,但是要把最后的g++删掉(注意不要删横杠)

./config no-asm shared no-async --prefix=/opt/oppenssl --cross-compile-prefix=arm-none-linux-gnueabihf-

打开生成的Makefile
第8行
修改PLATFROM=arm
在这里插入图片描述
删除第126 和 127行的 -m64
在这里插入图片描述

执行 make -j4 && make install 等待安装完成

安装qt5.12.0

将我们下载的qt源码 复制到自己的家目录下,不要放在root根目录下
复制后结果
解压qt源码压缩包

tar -xf  qt-everywhere-src-5.12.0.tar.xz

构建编译QT

首先对qt的部分源码进行修改,否则在ubuntu22.04下会存在找不到limits.h头文件的问题

向以下文件中添加

	#include <stdexcept>
 	#include <limits>
-----文件--路径-----
qtbase/src/corelib/global/qendian.h 
qtbase/src/corelib/tools/qbytearraymatcher.h
qtdeclarative/src/qmldebug/qqmlprofilerevent_p.h

向下列文件中添加

#include<stdint.h>

-----文件--路径-------
qtlocation/src/3rdparty/mapbox-gl-native/src/mbgl/util/convert.cpp

在下面这个文件中添加头文件时,需要注意添加位置:

 在 qtbase/src/corelib/global/qglobal.h的__cplusplus中添加#include <limits>

注意插入位置
在qtbase/src/corelib/global/qrandom.cpp 的第220 行添加typedef quint32 result_type;
qrandom.cpp

修改交叉编译工具链路径

使用编辑工具修改以下路径的配置文件

vim  $HOME/XXXXX/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf  # XXXXX是解压后的qt目录

修改内容:

#
# 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)
##########在这里添加新的选项
QT_QPA_DEFAULT_PLATFORM = linux    
QMAKE_CFLAGS += -O2 -march=armv7-a    #设置C语言目标环境为armv7-a 平台
QMAKE_CXXFLAGS += -O2 -march=armv7-a  #设置c++语言目标环境为armv7-a 平台
#####################################################

##########################这里的arm-linux-gnueabi-gcc
####						和arm-linux-gnueabi-g++ 
#							需要替换为自己的交叉编译工具(这里使用之前下载好的arm-none-linux-gnueabi-gcc工具)
# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabihf-gcc
QMAKE_CXX               = arm-none-linux-gnueabihf-g++
QMAKE_LINK              = arm-none-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabihf-g++

#这里也要同步替换为自己的交叉编译工具配置,
#在本文的环境中,这些配置位置在/usr/bin下
# 
# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabihf-objcopy
QMAKE_NM                = arm-none-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-none-linux-gnueabihf-strip
load(qt_config)
                                                                                                                                                                                                            

这是已经配置好的配置文件

开始构建

为了避免make后的文件污染源码文件,需要新建一个build文件夹

mkdir build && cd build

执行qt自带的.configure 脚本,本文只介绍部分参数,关于该脚本的具体参数请查阅qt官方文档
release -> 构建发布版程序
-opensouce 开源
confirm-license 同意开源许可
-xplatform : 编译哪个平台的qt 对应qtbase/mkspecs/目录下的文件名
-prefix XXXX : 输出目录路径 (默认路径 /usr/local)
-no-opengl: 不构建 opengl组件
-openssl -I : openssl库的头文件路径
-openssl -L : openssl库的链接库文件路径

QT_INSTALL_DIR 为解压后的qt源码目录
执行以下命令

root@tfy:/home/tfy/build $ : ../qt-everywhere-src-5.12.0/configure -prefix /usr/arm_qt -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -no-opengl -no-iconv -silent -qpa linuxfb -no-gtk -qt-libjpeg -qt-libpng -openssl-linked -I/opt/oppenssl/include -L/opt/oppenssl/lib

等待执行完毕后,build目录会出现已经生成好的makefile:
makefile

执行 make -j40 && make install  进行最终构建
设置qmake 路径
vim ~/.bashrc

在文件最后一行添加
export PATH=$PATH:/usr/arm_qt/bin #这里填自己的qmake路径

修改完成后执行更新
source ~/.bashrc

查看qmake版本

	qmake -v
使用qmake 对qt项目进行交叉编译

在windows上 使用qtcreator 创建的项目中默认会有一个.pro文件
在这里插入图片描述

将他们全部复制到wsl里并且切换到该目录下
执行 qmake
qmake #什么参数都不用加, qmake会自动搜索.pro文件
执行完之后会产生Makefile文件 
调用 make 交叉编译出最终文件  
检查文件数据
使用file命令进行检查文件基本信息
使用readelf -d  XXXX  查看文件所需要的所有依赖库
  • 32
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WSL是Windows Subsystem for Linux的缩写,它是适用于Linux的Windows子系统,可以在Windows上运行GNU/Linux环境,包括大多数命令行工具、实用工具和应用程序,而无需使用传统的虚拟机或双启动设置。\[2\] 根据引用\[1\]中提供的解决方法,如果在安装Ubuntu 22.04.01 LTS后打开时出现提示"something went wrong",可以尝试以下步骤进行解决: 1. 使用管理员身份打开Windows的命令提示符(cmd)。 2. 在命令提示符中执行以下命令:wsl --set-default-version 1。 3. 重新打开Ubuntu 22.04.01 LTS应用程序。 此外,如果在使用WSL时遇到其他问题,可以尝试执行引用\[3\]中提供的命令来设置编码。这些命令可以更新系统的语言环境设置,以确保正确的字符编码被使用。 希望这些信息对您有帮助! #### 引用[.reference_title] - *1* [安装wsl ubuntu22.04.01LTS时,遇到somthing went wrong](https://blog.csdn.net/ronety/article/details/127636665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Win11 + WSL + Ubuntu 22.04 LTS + ROS2 安装记实](https://blog.csdn.net/clovejava/article/details/125677158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想执行官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值