交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64

这篇具有很好参考价值的文章主要介绍了交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.交叉编译是什么,为什么要交叉编译

  • 编译:在一个平台上生成在该平台上的可执行代码
  • 交叉编译:在一个平台上生成在另一个平台上的可执行代码
  • 交叉编译的例子:如51单片机的可执行代码(hex文件)是在集成环境keil上面编译完成的,我们只需要将编译好的可执行代码下载到51单片机上即可运行
  • 要使用交叉编译的原因:
    (1)目的的平台上的资源贫乏,无法运行或安装我们所需的编译器
    (2)有时因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器
    (3)平台的运行至少需要的两样东西:bootloader(启动引导代码)和操作系统核心,这两样东西也是代码,同样需要进行编译为可执行代码才可运行,而此时原平台根本不支持编译,同样需要在其他平台上编译好可执行代码

2.交叉编译中的基础知识

  • 宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
  • 目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
  • 交叉编译需要用到的工具:交叉编译工具链

3.交叉编译工具链

  • arm32位:百度网盘链接:https://pan.baidu.com/s/1tw1SYXdJ2n0olry9SSc3gg
    提取码:xfjs
    这是要编译为arm32位的系统能运行的代码的交叉工具链接
  • arm64位:百度网盘链接:https://pan.baidu.com/s/14H-Xg31wVlidk_RwCLJrUg
    提取码:xfjs
    或者到这个链接:aarch64下载下面这个压缩包

gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz

4.安装交叉编译工具链

  1. 将下载好的压缩包通过ftp文件传输软件传到ubuntu中去,我用的是filezilla软件,这个软件免费好用,直接网上下载即可
  2. 解压压缩包

tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz

得到如下文件夹
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

  1. 进入到交叉编译工具链的bin目录下

cd gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

然后查看交叉编译的工具版本看是否安装好

./aarch64-linux-gnu-gcc -v

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
出现上图所示的版本号后,表示我们此时的交叉编译工具是可以使用了的,但是因为没有配置环境变量,我们此时只能在这个文件夹的bin目录下进行使用,非常不方便,所以要配置环境变量方便使用

  1. 配置环境变量

首先使用
echo $PATH
查看自己的环境变量
将现有的环境变量复制下来

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

然后用
pwd
查看自己当前所在交叉编译工具链的bin目录的完整路径
将这个目录也复制下来,要将这个目录加入到环境变量中

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

最后回到回到工作目录,打开.bashrc这个隐藏文件
vi .bashrc

在文件的后面根据自己的交叉编译工具链bin目录的位置加入环境变量,

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/workspace/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:/home/CLC/workspace/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

接着输入
source /home/CLC/.bashrc
加载配置文件,马上生效配置。

这时在任意目录下输入

aarch64-linux-gnu-gcc -v

显示如下图所示,即表示交叉编译工具链安装完成了
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux

5.交叉编译一个helloworld丢到树莓派上运行

  1. 编写一个test.c的文件
#include <stdio.h>

int main()
{

        printf("hello world!\n");

        return 0;
}
  1. 交叉编译这个test.c文件

aarch64-linux-gnu-gcc test.c -o helloInArm64

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
此时如果在x86的平台上运行这个可执行文件就会报错
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
我们可以用

file helloInArm64

查看这个文件的属性
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
这里只显示了它是一个64位的可执行文件,但没有显示平台架构,我们将它这个可执行文件放到树莓派等相关的arm架构平台上他就会显示平台的架构

  1. 在树莓派上运行这个交叉编译后的文件
    先使用

file helloInArm64

查看文件属性
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
这时就会显示平台的架构了

然后直接运行
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64,Linux笔记,linux
一个交叉编译的hellworld就运行成功了

一开始我安装的交叉编译工具是arm32位的,编译出来的可执行文件也是32位的,但我放到我64位的树莓派上也一样可以运行起来文章来源地址https://www.toymoban.com/news/detail-608356.html

到了这里,关于交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SPEC CPU 2006 1.2 D2000 ARM64 aarch64平台 docker 环境下的编译 宿主机测试

    由于spec cpu 2006版本太老,现代操作系统gcc版本远高于gcc4.3,且tools也没有提供arm64架构程序文件,导致安装编译会报大量编译错误,难以适配。故采用docker方式尝试编译。 https://download.csdn.net/download/hknaruto/86608404 验证可用 ---------------------------------------------------------------------

    2024年02月16日
    浏览(47)
  • ubuntu x86搭建 麒麟arm QT6交叉编译

    近期项目需求开发平台是unbuntu x86,目标机器是UOS arm架构,由于需要在不同平台上使用程序,需要建立基于QT6.32的交叉编译平台 交叉编译器 https://blog.csdn.net/zhang421412170/article/details/110952705 下载 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz(因为我这里用的是linux平台进行编译,需要

    2024年02月13日
    浏览(47)
  • 解决 “Function not implemented“, 为 arm64 架构宿主机重新构建 Nacos 镜像

    官方的 Nacos 镜像在 arm64 架构的系统上运行容器会出现 “Function not implemented” 的相关异常日志以致于容器内 Nacos 无法正常启动. 原因是官方镜像基于的 CentOS 7.x 的基础镜像版本并不支持 arm64 架构的系统. 其实 7.x 版本是有 arm64 支持的, 只是官方镜像并没有采用那个 platform (

    2024年02月08日
    浏览(43)
  • Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程

    苦辣酸甜时光八载,春夏秋冬志此一生 Qt简介: Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。 Qt 支持的操作系统有很多,例如通用

    2024年01月23日
    浏览(50)
  • 宿主机(Windos)上文件上传至Ubuntu (linux)

    因为我想在ubuntu20.04 上安装Sublime Text ,然而我不想在ubuntu 上下载安装因为太简单了。 我想在windos 上下载好linux 版本,然后发送到ubuntu上(和ubuntu上下载安装多了一个上传的过程),我决定挑战一下 第一步进入VM 后打开你的Ubuntu (linux )环境,通过桌面右击进入终端 退到文

    2024年02月04日
    浏览(41)
  • VMWare ubuntu共享宿主机window11文件夹

    找到需要共享的文件夹,比如我需要share文件夹共享到虚拟机中 点击“ 共享 ”文件夹属性,如果找不到“共享”选项卡,需要在下面的“ 选项 ”中 注意勾选“ 使用共享向导(推荐) ”,如果 已经勾选,则先取消勾选,然后关闭页面后重新去勾选,以便共享选项卡会出现

    2024年02月19日
    浏览(54)
  • wsl1 ubuntu通过宿主机代理连接外网

    背景:公司电脑是局域网,通过走代理来连接外网 wsl1 ubuntu想要通过来连接宿主机的局域网代理,访问外网 可以先在ubuntu上测试下走代理的网络,注意不能用ping(ping不走代理),可用curl测试 配置在 /etc/profile.d 目录下,新建个.sh文件( vim /etc/profile.d/http_proxy.sh ) 然后,

    2024年02月13日
    浏览(40)
  • Ubuntu20.04_x86交叉编译aarch64版本的tslib1.22步骤

    编译环境:小米笔记本+Windows10+VMware17 +Ubuntu20.04虚拟机 编译目标:需要生成aarch64环境下对应的触摸屏驱动。 编译步骤: 1、下载aarch64-linux-gnu编译器,下载地址为:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.x

    2024年02月16日
    浏览(47)
  • ros2交叉编译 x86到arm

    内容概括: 本篇文章记录了ros2 交叉编译(从x86_ubuntu到arm_ubuntu)过程,以及问题解决。 ros2官方文档 中给出了 三种交叉编译 编译的实现方法: ①提前在本地下载ros2源码然后创建docker ②直接自动下载ros2源码然后创建docker③不用ros2源码,在docker中安装预编译ros 因为交叉编译

    2024年04月17日
    浏览(53)
  • 【交叉编译】编译生成 x86、arm 环境下的FFTW库

    FFTW是一个快速计算离散傅里叶变换的标准C语言程序集,可计算一维或多维实和复数据以及任意规模的DFT。下面主要介绍的是 x86 环境下 FFTW库的编译过程,arm环境下的编译过程和FFTW类似,不同之处在于需要手动指定 编译环境 和 编译器 。 FFTW有三个版本的数据类型:double、

    2024年02月06日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包