ubuntu20.04搭建arm交叉编译环境

1.下载arm交叉编译程序

  • 源码下载地址:Downloads | GNU-A Downloads – Arm Developer

要根据目标系统选择编译器版本,我的主板:

aarch64bit体系结构(arm 64bit),linux内核GNU操作系统=GNU/Linux操作系统(简称linux)

大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。

小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

经过网上分享的代码测试发现我的是小端。

(在我对操作系统及内核不了解的情况下写的是arm64位小端

所以选择图中位置

(aarch64-none-linux-gnu):arm64位 linux裸机

(aarch64-none-linux-gnu):arm64位 linux小端

(aarch64_be-none-linux-gnu):arm64位 linux大端

ubuntu20.04搭建arm交叉编译环境_第1张图片​​

  •  解压文件
tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
  • 拷贝文件到合适的位置(我的位置: /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu)
  • 目录内容如下

ubuntu20.04搭建arm交叉编译环境_第2张图片​​

 该内容用于配置qt内部的qmake.conf文件

​2.编译arm的qt项目源码

  • qt源码下载路径:https://download.qt.io/archive/qt/5.12/5.12.12/single/
  • 解压文件
tar -xvf qt-everywhere-src-5.12.12.tar.xz 
  • 拷贝文件到合适的位置(我的位置:/home/huhu/third_part/qt-everywhere-src-5.12.12    /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu)
  • 进入/home/huhu/third_part/qt-everywhere-src-5.12.12/qtbase/mkspecs目录下找到linux-aarch64-gnu-g++ 拷贝到linux-none-aarch64-gnu-g++:
cp -r linux-aarch64-gnu-g++ linux-none-aarch64-gnu-g++
  • 进入拷贝后的linux-none-aarch64-gnu-g++文件夹编辑qmake.conf文件结果如下:
#
# qmake configuration for building with aarch64-none-linux-gnu-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)

# modifications to g++.conf
QMAKE_CC                = aarch64-none-linux-gnu-gcc
QMAKE_CXX               = aarch64-none-linux-gnu-g++
QMAKE_LINK              = aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-none-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-none-linux-gnu-objcopy
QMAKE_NM                = aarch64-none-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-none-linux-gnu-strip
load(qt_config)

以上内容取决于交叉编译软件( /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin)文件夹下程序名

  • 创建编译输出文件夹,并增加权限
mkdir arm-qt
chmod +x arm-qt/
  • 执行configure生成Makefile文件,命令如下:
./configure -opensource -prefix /home/huhu/third_part/qt-everywhere-src-5.12.12/arm-qt -xplatform linux-none-aarch64-gnu-g++ -release -no-cups -qt-zlib -qt-libjpeg -qt-libpng  -no-openssl -no-pch -confirm-license -no-opengl

-prefix :编译完成文件输出目录

-xplatform:编译平台(/home/huhu/third_part/qt-everywhere-src-5.12.12/qtbase/mkspecs目录下新修改的qmake.conf所在的文件夹名称)

ubuntu20.04搭建arm交叉编译环境_第3张图片

 看到下图内容表示Makefile文件生成成功

  • 执行编译:
  • make
  • make install

3.qt安装与qtcreator交叉编译配置:

  • 下载路径:Index of /archive/qt/5.14/5.14.1
  • 修改权限
sudo chmod 777 qt-opensource-linux-x64-5.14.1.run
  • 执行安装
./qt-opensource-linux-x64-5.14.1.run

安装过程参考:嵌入式Linux下的Qt Creator环境搭建_安迪西的博客-CSDN博客_qt creator linux

我构建成功的文件名为button_test,在路径/home/huhu/third_part/qt_project/build-button_test-arm_linux-Debug下

ubuntu20.04搭建arm交叉编译环境_第4张图片

 4. 测试

启动arm主板,使用ifconfig获得主板ip地址,使用scp 将构建好的项目发送到arm主板上

scp 要传输的文件地址 用户名@ip地址:目标地址

scp ./button_test [email protected]:/home/huhuarm/Desktop/

传输成功后在arm上双击button_test文件运行,完成


问题1:

ubuntu20.04搭建arm交叉编译环境_第5张图片​​

 解决办法:安装build 的组件
sudo apt-get install build-essential

问题2:

ubuntu20.04搭建arm交叉编译环境_第6张图片​​

 因为我没有编译opengl模块,所以编译命令增加-no-opengl 参数

问题6:

ubuntu20.04搭建arm交叉编译环境_第7张图片

原因是ubuntu20.04默认安装了python3,所以需要给python创建一个软连接到python,这样命令行使用python才能成功调用到python3

sudo ln -s /usr/bin/python3 /usr/bin/python

你可能感兴趣的:(c++,qt,arm开发,开发语言)