makefile

交叉编译详解 一 概念篇_p_fly的博客-CSDN博客_交叉编译

  • 本地编译:在当前编译平台下,编译出来的程序只能放到当前平台下运行。
  • 交叉编译:在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:

交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)

交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

  • arch - 体系架构,如ARM,MIPS
  • verdor - 工具链提供商
  • os - 目标操作系统
  • eabi - 嵌入式应用二进制接口

根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如

  • arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌 入式系统的C库。
  • arm-none-linux-eabi:用于Linux的,使用Glibc

ABI 和 EABI两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

  • ABI:在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。
  • EABI:在嵌入式中,应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。

CROSS_PATH = /opt/gcc-arm-none-eabi-9-2020-q2-update/bin/
CONFIG_CROSS_COMPILE := $(CROSS_PATH)arm-none-eabi-
CONFIG_STRICT_CFLAGS ?= y
CONFIG_SAVE_TARGET ?= n
CONFIG_FORCE_WIN_SHELL ?= y
JOBS :=
ifeq ($(JOBS),)
  JOBS := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
  ifeq ($(JOBS),)
    JOBS := 1
  endif
endif

makefile编译错误情况整理_weixin_33796205的博客-CSDN博客

上一篇:选择并配置一个适合自己的IDE


下一篇:注册Github账号,并创建仓库,编辑自我介绍,并提交commit