从源代码到可执行文件

请简述程序从源代码到可执行程序的过程,面试经常会被问到!

这是一个屡见不鲜的问题,总而言之就如下四个过程:

预处理

比如有test.c源文件,内容如下:

#include <stdio.h>
/*主函数*/
int main(void)
{
	printf("hello world\n");//打印hello world!

	return 0;
}

 用预处理指令将其生成*.i文件

gcc -E -o test.i test.c // 将源文件test.c文件预处理生成test.i
                        // GCC的选项-E使GCC在进行完预处理后即停止
                        // GCC的选项-o是指定输出的文件名称

然后cat test.i查看文件的内容

这是截取test.i文件的部分内容,对比test.i与test.c文件,我们可以看出

预处理主要干了如下这些事

①展开宏#define,处理条件编译,如#if #ifdef #else #elif #endif等

②处理#include,讲其包含的文件插入到该预编译指令的位置

③删除所有的注释"//"和“/* */”

④添加行号和文件标识,方便调试时使用

编译

编译命令如下:

gcc -S -o test.s test.i // 将预处理生成的test.i文件编译生成汇编程序test.s
                        // GCC的选项-S使GCC在执行完编译生成汇编程序后停止
                        // GCC的选项-o是指定输出的文件名称

 展开test.s文件,我们可以看到,只要稍微懂点汇编语法,确实将文件转换成了汇编文件

汇编

汇编指令如下:

gcc -c -o test.o test.s // 将test.s文件汇编生成目标文件test.o
                        // GCC的选项-c使GCC在执行完汇编生成目标文件后停止

经过这一步就得到了ELF格式的可重定向的目标文件,这个文件中的内容我们是无法看懂的

链接

链接指令如下:

gcc -o test test.o

经过这一步就得到了最终的可执行程序,如:./test

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东皇※太一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值