1. 嵌入式软件中GCC编译,汇编,链接,调试的作用
GCC:是一套由GNU工程开发的支持多种编程语言的编译器。将程序代码编译成机器语言。
编译:1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制
语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一
个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查
和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称
为源程序分析,分析过程中发现有语法错误,给出提示信息。
汇编:把汇编语言翻译成机器语言的过程称为汇编,在汇编语言中,用助记符(Memoni)代替操作
码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制
码,就把机器语言变成了汇编语言
连接:用来把要执行的程序与库文件或其他已经翻译好的子程序(能完成一种独立功能的程序
模块)连接在一起,形成机器能执行的程序。
调试:编好程序后,用各种手段进行查错和排错的过程。
2. C脚本编译和链接的问题
编译器分为前端和后端
前端生成平台无关的中间代码
后端根据目标机器产生目标代码
连接器会根据你的目标平台,链接不同的库
windows下的c标准函数是msvcrt库实现的
linux下的c标准函数是libc库实现的
虽然编译阶段产生的目标代码是一样的,但是目标系统不一样,连入的库也不一样,编译器依靠这种机制实现同一代码在不同平台上的编译
比如printf函数在windows/linux下的实现就不一样,是根据特定系统提供的库实现的
3. c语言里面的编译和链接是怎么回事啊
C/C++语言的完整编译过程是
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。
二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。
4. 如何理解程序的编译,链接,加载等各个过程
编译是将高级程序语言(c,c++,c#等)转换成汇编语言,并且将变量翻译成寄存器
链接是将多个编译过的文件组合成一个文件,并且加入程序调用的库函数等所需的其他资源
加载是将以上处理过的后生成的指令(二进制码)在执行前加载到内存中,并提供地址翻译。
5. 编译、链接和交叉链接的区别与联系
1、链接是将目标代码与其他对象文件(例如库文件)合并成单个可执行文件的过程。在链接纳运过程中,符号解析和地址重差茄旦定向等操作被执行。
2、虚扰交叉链接是指将不同的目标文件和库文件进行链接,以生成适用于特定平台或操作系统的可执行文件。它通常用于开发跨平台应用程序。