编译器入门问题

来源:互联网 发布:java获取本地ip地址 编辑:程序博客网 时间:2024/05/22 00:27

1、什么是编译器

  编译器是一种翻译程序,作用是将一种计算机语言翻译成另一种计算机语言。将高级语言如C翻译成低级语言如汇编或机器码叫编译,反之则称反编译。 

 

2、什么是解释器

  解释程序是一种把高级编程语言直接运行的转译程序。解释器不会一次把整个程序转译出来。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停的进行下去。

  HOW?有哪些例子?

 

3、什么是目标文件(中间代码)

  目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。

  目标文件中的内容至少有编译后的机器指令代码、数据。没错,除了这些内容以外,目标文件中还包括了链接时所须要的一些信息,比如符号表、调试信息、字符串等。一般目标文件将这些信息按不同的属性,以"节"(Section)的形式存储,有时候也叫"段"(Segment)

 

4、编译过程有哪些

  编译器的编译过程通常有:词法分析、预处理、解析、文法分析、代码生成以及代码优化。

  一般从源代码生成PE文件的过程有:  源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 连接器 (Linker) → 可执行程序 (executables)

 

5、什么是交叉编译

  在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。

  要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:

  a、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。

  b、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

  c、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

 

6、有哪些常见编译器

C的只知道VC的Nmake,GCC.

 

7、编译器输出的是什么

  编译器的输入叫源代码,输出叫目标代码。 

  典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

 

8、什么是编译工具链(toolchain)

指编译过程中所用到的工具集合,如GNU Assembler "as",  GNU Linker "ld"

The complete set of tools used in the compilation process is referred to as a toolchain.