Linux系统下的gcc编译

本文介绍了C语言开发过程中的预处理阶段,包括宏替换、去注释和条件编译,以及随后的编译、汇编和链接步骤。特别强调了动态链接和静态链接的区别,如动态链接依赖于共享库而静态链接将库方法嵌入可执行程序以提高效率。
摘要由CSDN通过智能技术生成

一.预处理

预处理阶段包括宏替换,去注释,头文件的展开和条件编译,其中条件编译非常具有实际意义。

.指令: gcc -E -o myfile.exe(预处理后,生成test.i文件)

.条件编译 

 由上图可知,有宏定义的V1,因此在此条件下编译生成并运行可执行程序后屏幕上仅打印出“功能1”,由此实现了代码的动态裁剪,这种方法就叫做条件编译有利于提高后期的维护效率。

当然,我们也可以输入gcc -D 指令进行条件编译:

二.编译

 gcc -S file.name生成test.s文件,将C语言转化为汇编语言

三.汇编

gcc -c file.name 生成test.o文件,并且将汇编语言转化位二进制目标文件。

四.链接

链接是将我们写的程序与库结合起来,有利于提高开发效率

①动态链接

动态链接需要链接到系统下的动态链接库,这是一个共享库,实际上很多指令都是可执行程序,在编译时,编译器会传递目标库的地址,因此动态库的缺失,会导致很多程序无法执行。

这里的libc-2.28.so,就是一个c标准库 ,

注:可执行程序和库实际上都是加载到内存上,但由于动态库是共享的,只需加载一份,可以提高内存的利用率。

②静态链接

静态链接是把库中的方法直接拷贝到可执行程序中,只需要在编译时加上-stastic的后缀即可进行静态链接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值