程序编译+连接的简单过程

本文详细介绍了C语言程序的编译和链接过程,包括翻译环境和执行环境的区别,编译过程的预处理、编译、汇编、链接四个阶段,以及链接库和头文件的作用。通过实例展示了Linux环境下gcc编译器的操作,强调了预处理的头文件包含、删除注释和#define替换功能,以及链接阶段的符号表合并与重定位。最后简述了程序的运行环境和流程。
摘要由CSDN通过智能技术生成
1.程序的翻译环境和执行环境
在ANSI C的任何一种实现(编译器)中,存在两个不同的环境。
第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。
第2种是执行环境,它用于实际执行代码。
test.c要经过翻译环境变成可执行程序。可执行程序(test.exe)依赖执行环境实现效果。
二进制指令只有机器可以读懂,所以也叫机器指令。
翻译环境就是将C语言的源代码翻译成机器能读懂的二进制指令
翻译环境可以再分为两个过程:编译和链接
C语言源代码经过编译会生成一个目标文件,目标文件经过链接可以得到二进制文件
C语言代码在被编译后按ctrl+f7,在工程名路径底下(存在test.c的)的debug中有一个test.obj文件,在windows底下,以obj为后缀名的,就是目标文件。
一个工程中还可能存在多个如test.c一样的.c源文件,每一个.c文件都会单独经过编译生成一个.obj文件。
如存在test.c,add.c,sub.c源文件(写好的源代码),每个源文件都会单独进行编译器处理生成目标文件test.obj,add.obj,sub.obj
所有目标文件和链接库整体经过链接处理生成test.exe。
编译过程依赖编译器,链接过程依赖链接器。
程序的编译分为4个阶段:预处理,编译,汇编,链接
预处理是进行宏替换,去注释等操作,编译是先进行语法检错,然后把C语言代码编译成汇编代码(即目标文件),汇编就是把汇编代码编译成二进制机器指令。链接是将所有用到的代码打包,生成可执行程序
链接库就是把所用到的库函数从库中拿出来,头文件的作用是在编译时告诉编译器,这个函数是有的,格式如何,编译完成后进行链接时会从库中拿出来,头文件的作用是声明。
printf函数是C语言提供的,printf放在Libraries中,以.LIB为后缀的就是库。
静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为"库"文件;在链接步骤中,链接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。
软件中源代码编译成静态库来完成各种功能。
下面将使用Linux中的gcc编译器演示程序编译和链接的过程。
先了解Linux的基本操作指令:is——列出当前目录中的东西,图二是有东西的情况
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值