Linux下文件编译器-GCC/G++

前言

本文介绍了c/c++的编译过程以及gcc/g++的时使用 

一.c/c++翻译的本质:将高级语言翻译成二进制

1)程序翻译过程:

(1)预处理(头文件展开、宏替换、去注释、条件编译)还是C语言代码

​        头文件展开:将头文件内容拷贝到源文件代码里面

​        条件编译:根据不同的宏定义进行编译、在预处理阶段会根据条件对代码进行裁剪

在gcc进行编译的时候,可使用-D选项传递不同的宏值

观察到main函数里面代码只剩下一行,剩下的被裁剪掉了

(2)编译(转为汇编语言)汇编文件

(3)汇编(汇编转为二进制)可重定位二进制文件

(4)连接()

二.gcc/g++的使用

1.默认编译

gcc/g++ 文件名

将源文件生成默认命名为a.out的可执行程序

2.指定名称

gcc/g++ 源文件名 -o 可执行程序名 或者 gcc/g++ -o 可执行程序名 源文件名

3.从现在开始翻译,到预处理截至

gcc -E 源文件 -o 预处理后文件.i

4.从现在开始翻译,到编译后截至

gcc -S 文件 -0 编译后文件.s

5.从现在开始翻译,到汇编后截至

gcc -c 文件名 -o 汇编后文件.o

6.从现在开始翻译,到连接后截至

gcc 文件名 -o 可执行文件名

生成可执行程序

7.查看可执行程序依赖的库

ldd 可执行程序名

 三、动静态库的理解——链接

Linux下面动态库后缀为.so,静态库后缀为.a

windows下面动态库后缀为.dll,静态库后缀为.lib

动静态库本质都是文件,头文件也是文件

1)动态库

被所有使用者共享,一旦确实,所有使用者都无法运行

优点:可以较大的节约资源,包括磁盘、内存、网络等,在更新时不需要重新编译整个程序,只需要把对应的动态库更换即可。

缺点:一旦缺失一个动态库,所有的程序都无法运行。

2)静态库

将运行所需要的代码拷贝一份到所执行程序中。

优点:独立性高,丢失一份不会影响其他程序的正常运行

缺点:会造成较大的资源浪费,且如果函数库更新,需要重新编译整个程序

通过比较可以看到,静态链接得到的可执行程序比动态链接得到的可执行程序大得多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值