Linux中的开发工具--gcc/g++

前言

在之前的Linux学习中谈到过Linux中分区分文件后缀,所以文件可以设置后缀来提醒操作者文件类型,也可以什么也不设置。但是Linux系统不区分文件后缀不代表Linux下的程序不区分文件后缀,本篇博文介绍的gcc/c++是区分文件后缀类型的。

1.gcc/g++ 的使用介绍

gcc:C语言编译器,只能编译C语言

 g++:C++编译器,C/C++都能编译

2.gcc/g++ 使用方法

1.编译后生成的可执行程序名字默认为a.out

gcc code.c :编译程序

 2.自定义可执行程序的名字

 gcc code.c -o 自定义名字

3.使用C99标准编译 

 gcc code.c -std=99

./a.out  执行可执行程序

 

3.程序到可执行程序的四个阶段

  1. 预处理阶段
  2. 编译阶段
  3. 汇编阶段
  4. 链接阶段

3.1预处理阶段

预处理阶段要做的工作有:

  • 头文件展开
  • 去掉注释
  • 条件编译
  • 宏替换

gcc -E test.c -o test.i  :将程序停留在预处理过程后,生成.i文件

3.2编译阶段

编译阶段的主要工作是将代码翻译为汇编代码

gcc -S test.i -o test.s :将程序停留在编译过程后,生成.s文件

3.3汇编阶段

汇编阶段的主要工作是:将汇编代码变成可重定位二进制文件

gcc -c test.s -o test.o :将程序停留在汇编过程后,形成.o文件

3.4链接阶段

链接阶段的主要工作是将.o文件与系统库链接起来生成可执行程序

.o文件 + 系统库 =可执行程序

4.库函数的分类(动静态库)

ldd 可执行程序名 :查看可执行程序依赖的第三方库

 

可以发现,在路径lib64里有一个文件叫libc.so.6,这个就是a.out程序所要依赖的库 

 

 拓展:Linux和Windows下动静态库命名区别:

Linux下: .so 是动态库 .a 是静态库

Windows下: .ddl 是动态库 .lib 是静态库

 4.1动静态库的区别与优缺点

4.1.1动静态库的区别:
  • 动态库是共享库,通过函数地址来关联程序
  • 静态库是私有库,可以独立运行

 动态库: 是C/C++或其他第三方提供的所有方法的集合,被所有程序以动态链接的方式关联起来

 静态库: 是C/C++或其他第三方提供的所有方法的集合,被所有程序以拷贝的方式,将需要的代码拷贝至自己的可执行程序当中!

通俗的说,静态库是将所有代码拷贝过来,而动态库是去找函数的地址调用此函数。

4.1.2动静态库的优缺点:
  • 动态库

优点:形成的可执行程序体积较小,节省资源
缺点:要找函数地址,会稍慢一点,并且有强依赖性

  • 静态库:

优点:无视库,可以独立运行
缺点: 体积太大,浪费资源

注:我们在编译代码时,默认使用的是动态库,并且Linux下绝大多数库都是动态库!

如果想链接静态库使用指令:

gcc test.c -static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值