gcc gnatmake Ada编译器是用什么语言编写的?

gcc gnatmake Ada编译器是用什么语言编写的?,gcc,compiler-construction,gnu,ada,Gcc,Compiler Construction,Gnu,Ada,我是计算机科学专业的学生。目前我们正在学习Ada编程语言。现在的编译非常简单:gnatmake source.adb,所以我不知道gnatmake实际上做什么或是什么(脚本?二进制?其他什么?)。无论如何,我想知道编译器本身(如果是用另一种语言编写的,那么解析器也是用哪种语言编写的?gnatmake只是用Ada编写的工具。它的行为就像制造。编译器本身就是GNAT,也是用Ada编写的。它是用多种语言编写的GCC的一部分。gnatmake只是用Ada编写的工具。它的行为就像制造。编译器本身就是GNA

我是计算机科学专业的学生。目前我们正在学习Ada编程语言。现在的编译非常简单:
gnatmake source.adb
,所以我不知道gnatmake实际上做什么或是什么(脚本?二进制?其他什么?)。无论如何,我想知道编译器本身(如果是用另一种语言编写的,那么解析器也是用哪种语言编写的?

gnatmake只是用Ada编写的工具。它的行为就像制造。编译器本身就是GNAT,也是用Ada编写的。它是用多种语言编写的GCC的一部分。

gnatmake只是用Ada编写的工具。它的行为就像制造。编译器本身就是GNAT,也是用Ada编写的。它是用多种语言编写的GCC的一部分。

在GCC源代码树的Ada部分(
GCC/Ada
),有约2000个Ada源文件和约50个C源文件。C充当操作系统和GCC其他部分的粘合剂。Ada源文件中的一些(至少50个)用于gnatmake等工具


通过以各种方式使用
-v
选项,您可以了解更多有关
gnatmake
的功能:我最常用的是
gnatmake-v source.adb
概述,
gnatmake source.adb-cargs-v
显示如何调用编译器,
gnatmake source.adb-largs-v
了解GNAT链接器
gnatlink
的作用,以及
gnatmake source.adb-largs-Wl,-v
详细说明
gnatlink
如何调用系统链接器。

在GCC源代码树的Ada部分(
GCC/Ada
),有~2000个Ada源文件和~50个C源文件。C充当操作系统和GCC其他部分的粘合剂。Ada源文件中的一些(至少50个)用于gnatmake等工具


通过以各种方式使用
-v
选项,您可以了解更多有关
gnatmake
的功能:我最常用的是
gnatmake-v source.adb
概述,
gnatmake source.adb-cargs-v
显示如何调用编译器,
gnatmake source.adb-largs-v
了解GNAT链接器
gnatlink
的作用,以及
gnatmake source.adb-largs-Wl,-v
详细说明
gnatlink
如何调用系统链接器。

典型的编译器附带两个基本工具:编译器和链接器

comiler将语言源代码(文本)转换为机器语言对象文件(二进制文件)。它可能会包含一些对象重新定位信息,以帮助链接器

链接器获取多个机器语言对象文件,并将它们全部链接到一个机器可执行文件中

通常,您必须告诉编译器在何处查找执行编译所需的所有额外文件,然后您必须告诉链接器链接可执行文件所需的每个文件的名称,包括可能使用的文件库和系统库。这可能会变得非常复杂,这就是像
make
这样的构建工具的用武之地

Ada的定义是,应该总是有某种图书管理员为您跟踪这些信息。因此,要完成系统的完整构建,您所要做的就是让图书管理员为您构建可执行文件

Gnat
处理此库管理员功能的方式是,它假定(除非另有说明)Ada单元(包)名称与源文件名和对象文件名之间存在一对一的对应关系。因此,如果它需要
X
的规范来完成编译,它知道去
X.ads
查找规范文件。当它链接时,它知道它将在
X.o
中找到它的对象文件。这意味着,如果它需要一个来自package
X
的例程来成功链接,它完全知道如何为您做到这一点,而一个愚蠢的链接器只会失败并告诉您它找不到的“符号”的半加密名称

因此,不要像你必须用C或C++那样,为程序中的每个单元键入单独的编译命令,你可以使用<代码> GnATStudio< /Cord>来编译给定的可执行名称所需要的每个单元,然后将它们链接在一起。一步,轻松


至于最后一个问题,Gnat Ada编译器几乎完全是用Ada编写的。编译器通常使用自己的语言编写,并使用自己的语言进行编译。这就是所谓的


但是,它与GCC绑定,因此GCC中常见的部分(我认为是从树格式转换为目标代码和链接器的部分)是用C编写的。

您典型的编译器附带两个基本工具:编译器和链接器

comiler将语言源代码(文本)转换为机器语言对象文件(二进制文件)。它可能会包含一些对象重新定位信息,以帮助链接器

链接器获取多个机器语言对象文件,并将它们全部链接到一个机器可执行文件中

通常,您必须告诉编译器在何处查找执行编译所需的所有额外文件,然后您必须告诉链接器链接可执行文件所需的每个文件的名称,包括可能使用的文件库和系统库。这可能会变得非常复杂,这就是像
make
这样的构建工具的用武之地

Ada的定义是,应该总是有某种图书管理员为您跟踪这些信息。因此,要完成系统的完整构建,您所要做的就是让图书管理员为您构建可执行文件

Gnat
处理此库管理员功能的方式是,它假定(除非另有说明)Ada单元(包)名称与源文件名和对象文件名之间存在一对一的对应关系。因此,如果它需要规范
$ which gnatmake
/usr/bin/gnatmake
$ file /usr/bin/gnatmake
/usr/bin/gnatmake: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped