在Linux环境中进行编译代码

目录

预处理

编译

汇编

链接

预处理(-E)

汇编(-S)

可重定位⼆进制⽂件(-c)

理解⼀下,引⼊新概念:动静态库


C语言只能使用gcc/g++

C++只能使用g++

左边的w是warning,因为你定义了sum,还没有使⽤,⽤了sum就不不会有了。

(语法检查) 在编译。

这样⼀串代码时可能会报错,这样加上就可以了。因为编译器版本⽼了。

这样编译出来的名字都是a.out,如果要按⾃⼰想的就要这样写:

-o 的意思是,直接⽤源⽂件编译形成⾃定义可执⾏程序

使⽤g++也可以对c语⾔的代码进⾏编译,跟IDE⼀样

C++的源⽂件名有很多写法

.cpp/.cc/.cxx

⽤gcc编译c++的代码发现编译不过去了。就是因为gcc只能编译c语⾔的。

程序的翻译 C语⾔的源⽂件经过翻译成为可执⾏⽂件,经历了以下⼏个阶段:

C源⽂件 -> 预处理 -> 编译 -> 汇编 -> 链接 -> 可执⾏程序

  • 预处理

1.头⽂件展开(把头⽂件内容直接拷⻉到源程序,头⽂件⾥写的其实就是函数的声明)

2.去注释

3.条件编译(通过条件编译,可以实现对代码的动态裁剪!)

4.宏替换

  • 编译

c -> 汇编

  • 汇编

汇编 -> 可重定为⼆进制⽂件

  • 链接

形成可执⾏

验证以上的概念:

​​​​​​​

  • 预处理(-E)

gcc -E [⽂件名(code.c)]

就会直接把预处理的结果显示到显示器上,但是显示器上打太麻烦了

gcc -E code.c -o code.i

这样可以把结果放在⼀个临时⽂件中,这个⽂件⼀般为.i

-E:从现在开始,帮我进⾏程序的翻译,等预处理完成后,就停下来,别往后继续⾛了!

  • 汇编(-S)

gcc -S code.i(.c也可以只是要再⾛⼀次预处理) -o code.s

-S:从现在开始进⾏程序的翻译,等编译⼯作做完,就停下来!

  • 可重定位⼆进制⽂件(-c)

gcc -c code.s -o code.o

-c:汇编做完就停下来,做完已经是⼆进制了

vim打开是乱码,查看他要⽤⼆进制⼯具,⽐如od(这个code.o)并不能执⾏

od code.o

然后再

*.0(所有的点o⽂件) + 系统库 = 可执⾏程序

gcc code.o        就可以直接链接形成a.out

理解⼀下,引⼊新概念:动静态库

这⾥就是函数的头⽂件存放的位置,相当于函数的声明

ldd 指令,可以直接看到⼀个可执⾏程序他所依赖的第三⽅库的信息。(函数的实现)

代码 + 头⽂件 + 库 =可执⾏程序

以上都是⽂件!所以,所谓的开发环境安装,⼀定要做什么⼯作?怎么理解?安装下载并拷⻉头⽂件和库⽂件到开发 环境中的特定路径下,⼀定要能被编译器⾃⼰找到!

库的命名:libc.so.6

库必须以lib开头so表示类别是动态库还是静态库在后⾯就是版本号。都去掉就是

c标准库

⼀般在Linux环境下

.so:动态库 (居多)

.a :静态库 默认是没有安装的

在Windows中

XXXX.dll:动态库

YYYY.lib :静态库

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

        库中的所有的函数,都有⼊⼝地址,所谓的动态链接,其实就是要把连接库中的函数地址拷⻉到我们 的可执⾏程序的特定位置!

  • 静态库(静态链接) 是C/C++或者其他第三⽅提供的所有⽅法的集合,被所有程序以拷⻉的⽅式,将需 要的代码,拷⻉到⾃⼰的可执⾏程序中!

动态链接:

优点:形成的可执⾏程序体积⽐较⼩,⽐较节省资源!

缺点:稍微慢⼀些,强依赖动态库,动态库没了,所有的依赖这个库的程序都⽆法运⾏了。

静态链接:

 优点:⽆视库,可以独⽴运⾏

缺点:体积太⼤,浪费资源

默认情况下,云服务器是没有安装C静态库的,只有动态库,如果要安装C静态库:

sudo yum install glib-static

C++的静态库

sudo yum install -y libstdc++-static

可以看⻅静态库链接的⽂件远远⼤于动态库链接的⽂件。

所以下载IDE的时候,默认要做的是:

1、下载开发环境include,lib

2、设置合理的查找路径

3、规定好我们形成可执⾏程序的链接⽅式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KrisZhang10

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

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

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

打赏作者

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

抵扣说明:

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

余额充值