Linux虚拟机如何为树莓派交叉编译?环境变量配置详解

 更新时间:2026年08月25日 16:28:07   作者:haozigegie  
还在为交叉编译发愁?本文手把手教你如何在Linux虚拟机上为树莓派搭建交叉编译环境,从工具链下载、环境变量配置到编译ARM可执行文件,并讲解如何链接正确的第三方库,让你轻松搞定嵌入式开发

交叉编译

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

为什么要进行交叉编译

  • 目的平台资源匮乏,缺少我们需要的编译器,导致某些文件无法编译运行。
  • 目的平台还没有建立,连操作系统都没有,因此即使树莓派有自己的操作系统(linux),当树莓派的目的平台还没有建立时一样也要进行交叉编译,因为操作系统也是代码,一样要进行编译。目的平台运行至少需要两种东西:BootLoader(启动引导代码)以及操作系统核心,这也就是为什么需要交叉编译的原因

交叉编译需要的工具

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

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

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

Raspberry Pi · GitHub

  • 使用命令unzip 解压该zip压缩包

  • 进入目录配置环境变量 /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

配置临时有效的环境变量,仅在当前命令窗口有效

1:命令echo  $PATH 查看当前环境变量

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

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

配置永久有效的环境变量,所有命令窗口有效

1:回到工作目录,命令sudo vi .bashrc进入隐藏文件bashrc

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

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

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

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

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

交叉编译时链接第三方库

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux环境下生成openssl证书注意细节介绍

    Linux环境下生成openssl证书注意细节介绍

    大家好,本篇文章主要讲的是Linux环境下生成openssl证书注意细节介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 轻松搞定VIM高亮NGINX配置文件的方法

    轻松搞定VIM高亮NGINX配置文件的方法

    在使用vim在写东西的时候,如果有语法高亮显示就会方便很多,之前给大家介绍了很多关于vim高亮的文章,那这篇文章主要给大家介绍了如何轻松搞定VIM高亮NGINX配置文件的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • linux之core文件配置全过程

    linux之core文件配置全过程

    调试程序时core文件不生成?本教程教你两步排查:先检查用户权限并设为不受限,再修改core文件默认保存路径,避免被apport等程序拦截,提供永久配置方法,确保重启后仍有效,助你顺利调试崩溃问题
    2026-08-08
  • Linux守护进程的启动方法

    Linux守护进程的启动方法

    这篇文章主要为大家详细介绍了Linux守护进程的启动方法,本文介绍如何将一个 Web 应用,启动为守护进程,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Linux之信号的使用及说明

    Linux之信号的使用及说明

    文章主要介绍了信号的基本概念以及如何通过signal()进行信号处理的修改,接着对SIGINT和SIG_IGN信号进行了说明,最后介绍了kill()函数用于向指定进程发送指定信号
    2026-04-04
  • Linux 服务器同步 Rsync同步服务器文件

    Linux 服务器同步 Rsync同步服务器文件

    服务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服 务器来提供下载服务。
    2009-08-08
  • linux系统中rsync+inotify实现服务器之间文件实时同步

    linux系统中rsync+inotify实现服务器之间文件实时同步

    这篇文章主要介绍了rsync+inotify实现服务器之间文件实时同步,需要的朋友可以参考下
    2014-11-11
  • jar包在linux服务器已经运行好但是访问不到地址的问题及解决方法

    jar包在linux服务器已经运行好但是访问不到地址的问题及解决方法

    这篇文章主要介绍了jar包在linux服务器已经运行好但是访问不到地址的问题,解决方案是需要修改防火墙开放的端口,查看防火墙开放的端口,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Centos7实现磁盘限额设置方法

    Centos7实现磁盘限额设置方法

    本篇文章给大家详细分享了Centos7实现磁盘限额设置方法,对此有需要的朋友可以参考学习下。
    2018-02-02
  • Ubuntu20.04桌面安装及root权限开通和ssh安装详解

    Ubuntu20.04桌面安装及root权限开通和ssh安装详解

    这篇文章主要介绍了Ubuntu20.04桌面安装及root权限开通和ssh安装详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论