Linux编译器-gcc/g++使用

1. 背景知识

1. 预处理(进行宏替换)

2. 编译(生成汇编)

3. 汇编(生成机器可识别代码)

4. 连接(生成可执行文件或库文件)

2. gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

编译(生成汇编)

汇编(生成机器可识别代码)

连接(生成可执行文件或库文件)

在这里涉及到一个重要的概念:函数库

函数库一般分为静态库和动态库两种。

自己总结

gcc mycode.c -0 mytest,后,./mytest就可以编译了,相当于把a.out重命名了

1、只进行预处理:gcc -E mycode.c -0 mycode.i,(预处理后干净的C语言)

2、变成汇编语言(编译)gcc -S mycode.i -o mycode.s(将汇编工作做完,就停下来)

3、汇编(生成机器可以识别代码)gcc -c mycode.s -o mycode.o,(mycode.o是目标文件,将会边工作做完,就停下来了),.obj文件,虽是二进制了,但不可以单独执行,需要经过连接才行。

4、连接,gcc mycode.o -o mytest后,再./mytest可以编译成功,连接过程将可重定位目标二进制和库进行连接形成可执行程序。键盘上的Esc方便记忆

.o和库是如何连接的?1、动静态连接

C语言静态库安装,sudo yum install -y glic-static livsbtdc++-static

gcc mycode.c -o mycode -static,静态连接,gcc默认用动态库,没有静态库,用不了static,-static本质:所以的连接都需要要求全部变为静态连接

动静态的优缺点:

动态库是因为共享库,可以有效节省资源(磁盘,内存,网络完全)等,一旦缺失,各个程序无法运行,静态库:不依赖库,程序可以独立运行,消耗资源,体积大

g++ mycode.cpp -o mycode -static -g(-g是用debug的意思,因为默认是release版本)

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值