C++ GNU ARM嵌入式工具链和普通gcc/g++;采用裸金属臂结构

C++ GNU ARM嵌入式工具链和普通gcc/g++;采用裸金属臂结构,c++,linux,gcc,arm,C++,Linux,Gcc,Arm,第一次海报长期潜伏者 我一直使用ARM NOE-EABI+G++来编译我的嵌入式C++代码,因为这是我们在嵌入式系统大学课程中所做的。对于我的计算机科学课程,我们只使用G++来编译C++代码。我一直在翻阅GCC手册,发现GCC有很多功能。我的问题是使用arm提供的arm-none-eabi-g++二进制文件和g++与-mcpu=cortex-m4-march=armv7编译选项进行交叉编译有什么区别?看来你可以使用gcc(Ubuntu附带的gcc)为ARM交叉编译,到目前为止,我一直很难在互联网

第一次海报长期潜伏者


我一直使用ARM NOE-EABI+G++来编译我的嵌入式C++代码,因为这是我们在嵌入式系统大学课程中所做的。对于我的计算机科学课程,我们只使用G++来编译C++代码。我一直在翻阅GCC手册,发现GCC有很多功能。我的问题是使用arm提供的

arm-none-eabi-g++
二进制文件和
g++
-mcpu=cortex-m4-march=armv7
编译选项进行交叉编译有什么区别?看来你可以使用gcc(Ubuntu附带的gcc)为ARM交叉编译,到目前为止,我一直很难在互联网上找到这个问题的直接答案。

我想我已经找到了答案。因此,使用GCC可以构建交叉编译器和相关的工具链。ARM构建了自己的交叉编译器,并将其作为“官方GNU ARM嵌入式工具链”供人们使用。它基本上是一个元“我使用编译器来构建编译器问题”。我看到的选项
-mcpu=cortex-m4-march=armv7
是在构建GCC时针对体系结构,而不是在编译时针对体系结构

gcc的设计是这样的,它是一个通用编译器,有许多目标(后端)和许多前端。但是,当您将它从源代码转换成可用的二进制代码时,您可以选择一个(后端)。后端作者确定窄/宽的程度,例如,arm none eabi将从大约arm1或arm2构建到armv7(取决于gcc的版本)的全尺寸arm变体以及thumb变体。x86计算机上的gcc为x86以及后端支持但不会为arm构建的任何变体构建。如果安装通用的预构建clang/llvm,它至少会让您使用命令行为所有目标指定后端,从而达到程序集或对象级别,链接是另一回事(可以根据需要使用gnu binutils进行组装和链接)不同的人对他们的工具…..配置/目标= ARM无EABI前缀= /opt/GNARARM——没有头——用NeLIB——GNU AS——GNU LD——使能语言=“C”——使框架指针= NoW对C++感兴趣,这是整个其他PITA相比C,你可能想要坚持一个预构建。网站并不是唯一一个可以得到一个网站的地方,但似乎人们都被这个网站所吸引,因为它是一个自我宣布的官方网站。