Linux交叉编译

目录

 

 

交叉编译

为什么要进行交叉编译

 交叉编译需要的工具

Linux虚拟机为树莓派进行交叉编译

下载交叉编译工具链(树莓派)

使用交叉编译工具链来交叉编译文件

交叉编译时链接第三方库

 

交叉编译

交叉编译是在一个平台上生成另一个平台的可执行代码,例如我们在Windows编写的C51的代码,并编译生成在C51上可执行的xxx.hex文件,这个文件是在C51上运行的而不是在Windows运行的。

为什么要进行交叉编译

  • 目的平台资源匮乏,缺少我们需要的编译器,导致某些文件无法编译运行。
  • 目的平台还没有建立,连操作系统都没有,因此即使树莓派有自己的操作系统(linux),当树莓派的目的平台还没有建立时一样也要进行交叉编译,因为操作系统也是代码,一样要进行编译。

    目的平台运行至少需要两种东西:BootLoader(启动引导代码)以及操作系统核心,这也就是为什么需要交叉编译的原因

 交叉编译需要的工具

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

Linux虚拟机为树莓派进行交叉编译

下载交叉编译工具链(树莓派)

Raspberry Pi · GitHub

  • 使用命令unzip 解压该zip压缩包
    178fc30059c0429db4c2783a155af14d.jpeg
  • 进入目录配置环境变量 /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
    fe02d003c572464189d7001e02a13668.png

    配置临时有效的环境变量,仅在当前命令窗口有效
    1:命令echo  $PATH 查看当前环境变量
    e8e750943a2d47a88cc180396d70d43f.jpeg

    2:命令export  PATH=??将/snap/bin替换成当前路径得到新的环境变量4e2d48df4453449f82f53658776184c9.png
    31aab47ffc864dd28bda5cc4e8147c74.png

    3:回到工作目录测试交叉编译工具链
    cba91f4fa4334c3dac8fe814e82ac377.png

    配置永久有效的环境变量,所有命令窗口有效
    1:回到工作目录,命令sudo vi .bashrc进入隐藏文件bashrc
    bbfacf12460e4f53b5bc92399ebfa8d7.png

    2:将刚刚配置临时有效的环境变量后新环境变量写入该文件
    0e0081b1e2f6424295d4dc0fa84ad052.png

    3:执行命令source .bashrc 让刚刚写入的内容生效
    5b3cf4aabe234fdf8e879e190e59cc93.png

使用交叉编译工具链来交叉编译文件

配置好环境变量后就能在任何目录底下使用交叉编译链来编译文件了
8c1b822f99f84fb0986e42ee969988f7.png

可以看到使用gcc和交叉编译链编译的可执行文件的文件属性不一样,gcc编译的可执行文件属于x86平台,交叉编译链编译的可执行文件属于ARM平台

交叉编译时链接第三方库

由于我们使用的是交叉编译链编译目的平台的可执行文件,因此当我们需要链接第三方库时,该库应该也是目的平台的第三方库,否则该交叉编译链将不认识此库,怎么使用第三方库可以看往期博文。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux交叉编译工具链是一种工具,用于在一种操作系统上编译另一种操作系统的程序。它通常包括编译器、链接器、库文件和头文件等工具,可以将源代码编译成可在目标平台上运行的可执行文件或库文件。使用Linux交叉编译工具链可以方便地在一台主机上编译多种不同的目标平台程序,提高开发效率和代码可移植性。 ### 回答2: Linux交叉编译工具链是一种基于Linux系统进行跨平台编译的一系列工具集合,可以用于将代码在一种CPU上编译为另一种CPU上的可执行文件。 在嵌入式系统、移动设备等小型设备中,通常不支持完整的编译工具链。为了实现在这些设备上进行编译和构建,需要使用交叉编译工具链。交叉编译工具链包括GCC、binutils、glibc、kernel、libc等工具,可以通过这些工具完成将源代码编译为目标平台上可执行文件的过程。 使用交叉编译工具链,可以在一台Linux主机上编译嵌入式系统的嵌入式程序,然后将编译出来的可执行文件烧写到目标嵌入式系统上。通过使用交叉编译,可以缩短编译时间,降低开发成本,提高代码的可移植性和稳定性。 在使用交叉编译工具链时,需要先设置交叉编译环境变量。同时,还需要注意要选择相应的工具链版本,以确保与目标平台操作系统的兼容性。此外,还需要注意工具链的配置和使用方式。 总的来说,Linux交叉编译工具链是一套用于把源码编译成在不同系统平台中可执行程序的工具,通过使用这套工具链,可以加快开发和构建的过程,提高代码的可移植性和稳定性,为嵌入式系统、移动设备等小型设备的开发提供了便利。 ### 回答3: Linux交叉编译工具链是一组能够在一个操作系统环境中生成运行在另一个不同操作系统环境中的目标代码和可执行文件的工具。交叉编译的过程中需要使用到工具链,工具链中包含了一组开发工具,包括编译器、链接器、汇编器、调试器等,这些工具可以帮助开发者编写、编译和调试各种不同平台的程序。 在Linux操作系统中,Linux交叉编译工具链是非常重要的开发工具之一,它使得开发者能够轻松地将代码从一个平台迁移到另一个平台。通常,我们在Linux系统上开发程序,但是我们可能需要在另一个平台上部署生成的可执行文件(如Windows),此时就需要使用到交叉编译工具链。相对于原生编译工具链,交叉编译工具链的特点在于其能够生成针对特定平台、架构的目标代码,具有更高的灵活性和可移植性。 通常情况下,交叉编译工具链的构成包括交叉编译器、交叉链接器、交叉汇编器以及对应的调试器。交叉编译器是核心部分,它能够将源代码翻译成适用于目标平台的机器指令。交叉链接器负责将目标文件连接成可执行文件。交叉汇编器用于编写汇编程序,也需要使用交叉编译器来最终生成二进制代码。而调试器则负责帮助开发者调试程序,定位bug,支持的功能也与本地调试器相仿。 需要注意的是,由于不同的平台、架构在计算机中的表示方式是有差异的,例如x86架构和ARM架构的二进制格式不同,因此需要使用不同的交叉编译工具链进行开发。相比于原生编译工具链,交叉编译工具链的使用也有一定的门槛,开发者需要了解目标平台/架构的细节以及对应的交叉编译工具链的使用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值