编译程序
- 现代编译程序是一支将某抽象度较高的编程语言程序【转化】为运行在【某软硬体系下】的抽象度较低的编程语言程序的【程序】。所谓硬件体系是指处理器体系,软件体系指操作系统体系
转载教程,受益匪浅
操作系统 编译器 迭代开发 个人理解
- 条件说明:原软硬件环境中已有c编译器,开发一个新硬件环境上的新的操作系统和该系统上的编译器
- 操作系统依赖于硬件架构,如X86,ARM。需先开发交叉编译器(硬件)
- 开发操作系统,用1中交叉编译器编译,操作系统开发完成
- 开发交叉编译器(硬件、软件)
- 用3中交叉编译器编译3中交叉编译器代码,得到新系统中编译器。
- 操作系统与编译器开发完成
以上在原软硬件环境中开发,下面进入新软硬件环境开发 - 开发c标准库,在新操作系统上用编译器编译c标准库代码,得到c标准库
- 可以开始开发应用程序了
编译器对硬件的依赖 个人理解
- 编译器是一个程序,需由cpu执行,程序机器语言必须与硬件相适应,如x86 ARM
以上着眼于编译器自身是程序的性质,以下着眼于编译器编译程序的功能性质 - 编译器编译c程序的结果是二进制机器代码,必须与硬件相适应,,如x86 ARM
编译器对操作系统的依赖 个人理解
- 编译器是一个程序,是一个可执行文件,特定的操作系统可执行文件的组织结构也是不同的
- 编译器是一个程序,运行在操作系统之上,执行系统调用时会陷入内核执行内核代码
以上着眼于编译器自身是程序的性质,以下着眼于编译器编译程序的功能性质 - 编译器编译c程序的结果是二进制机器代码程序,运行在特定操作系统之上需要特定的加载方式,特定的操作系统可执行文件的组织结构也是不同的。
- 个人理解,如有错误请见谅。编译器编译程序时,如果要编译的c文件包含系统调用,则需要将 系统调用语句 转变为相应的 跳转执行内核程序 的机器指令。各操作系统系统调用实现内核程序不同(地址等),故对操作系统有依赖
其他需要注意的点
- 编译器代码和编译器不同,编译器是已经编译完成的二进制可执行文件,编译器代码是源代码
- 编译器自己是程序,功能是将源代码编译成程序
- 把操作系统内核中系统调用实现当做一个c库,编译的时候系统调用编译为跳转内核执行机器指令,个人认为和普通库相似又有些不同,猜测可能需要在编译器代码中明确写出某一系统调用跳转到内核某一位置