当前位置:首页 » 编程语言 » c语言链接过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言链接过程

发布时间: 2022-02-12 12:09:20

‘壹’ 开发一个c语言程序要经过哪四个步骤

开发一个C语言程序需要经过的四个步骤:编辑、编译、连接、运行。

C语言程序可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。

1、预处理:输入源程序并保存(.C文件)。

2、编译:将源程序翻译为目标文件(.OBJ文件)。

3、链接:将目标文件生成可执行文件( .EXE文件)。

4、运行:执行.EXE文件,得到运行结果。

(1)c语言链接过程扩展阅读:

C语言代码变为程序的几个阶段:

1、首先是源代码文件test.c和相关的头文件,如stdio.h等被预处理器cpp预处理成一个.i文件。经过预编译后的.i文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件也已经被插入到.i文件中。

2、编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析以及优化后产生相应的汇编代码文件,这个过程往往是我们所说的整个程序的构建的核心部分,也是最复杂的部分之一。

3、汇编器不直接输出可执行文件而是输出一个目标文件,汇编器可以调用ld产生一个能够运行的可执行程序。即需要将一大堆文件链接起来才可以得到“a.out”,即最终的可执行文件。

4、在链接过程中,对其他定义在目标文件中的函数调用的指令需要被重新调整,对实用其他定义在其他目标文件的变量来说,也存在同样问题。

参考资料来源:网络-c语言

‘贰’ C语言模块的编译与连接过程

gcc a.c -o a.o -c
gcc b.c -o b.o -c
ld a.o b.o -lcrtdll -o ab.exe

编译就是把代码编译成中间格式(win32、coff、elf等),连接就是把中间格式的文件加上头组合成真正的可执行程序。编译的时候检查语法错误,连接的时候检查连接的库是否完整,是否所有导入符号都有实际定义等等。

‘叁’ c语言 tc环境的具体链接编译运行步骤

ctrl-f9
写好后就这样就可以运行了啊!
你说的连接那些都是自动完成的。

‘肆’ C语言的编译、链接、加载、运行全过程

C语言的编译、链接、加载、

‘伍’ c语言里面的编译和链接是怎么回事啊

C/C++语言的完整编译过程是

一、预编译

处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。

二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。

三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

‘陆’ 问个C语言的编译链接问题

头文件是用来说明函数接口和数据结构的,不是静态链接库。

静态库(在windows下是lib文件,linux下是.a文件)和动态库(windows下是dll文件,linux下是.so文件)是库文件的两种形式,都是在链接阶段完成;区别在于静态库在链接时和应用程序打包在了一起,动态库只是做了一些指向修改的事情,待到应用程序实际执行时,才加载该动态库到内存。

可以看一下“程序员的自我修养”这本书

‘柒’ C语言程序链接

程序中用的是相对位置(offset),相对这某一个开始点。
当程序被加载前,开始点是不确定的,但每块数据的相对位置是确定的。
但加载后,可是点是确定的,这样,很容易得到数据的位置:开始点+相对位置。

‘捌’ C语言 四个过程:预处理,编译,汇编,链接,分别进行了什么过程别度娘。

预处理:替换代码中的预处理命令(宏定义就是在这里直接替换的)
编译:对代码按执行顺序进行编译成.o或.obj目标文件
汇编:将其他高级语言转换成机器语言
链接:代码中的各种调用关系重定位

‘玖’ 宏和函数的区别以及C语言的编译链接过程

  1. 宏在编译之前,需要进行预处理,将宏直接提换成宏定义的代码,是直接替换,也就是说,在预处理之后,你再看代码,发现宏定义已经被替换过来了,你看到是你定义之后的那一串代码。

    而函数,在编译之后,有一系列调用函数的过程,比如,传参,压栈等,这部分是编译器所做的。

  2. C 语言编译链接过程:

    test.c(原始代码) --> 预处理 --> test.i(经过预处理的)--> 编译 --> test.s(汇编代码)--> 汇编 --> test.o(目标文件,其实这部分已经是单个文件的完整二进制文件了,只是还不能执行,如果不懂这句话,可以再问我,其实这部分知识,平时也很少遇到) --> 链接 --> test (可执行文件,比如一个程序由3个代码文件共同生成,那么就会有3个.o格式目标文件,链接是把多个目标文件真正的联系在一起,比如a.o 中使用了 b.o中的一个函数,那么它们两个之间的地址是如何确定的(同理,可引申到使用函数库的问题,使用printf函数,也是需要链接器进行确定printf函数地址,才能知道如何调用。)这个就是链接器的作用)