Linux笔记_gcc

文章详细介绍了Linux环境下使用gcc进行程序编译的过程,包括预处理、编译、汇编和链接。讨论了静态库与动态库的区别,以及静态链接和动态链接的优缺点。此外,还提到了make和makefile在自动化编译中的作用,以及如何通过它们定义依赖关系和编译规则。
摘要由CSDN通过智能技术生成

关于gcc的一些笔记。

程序的翻译

gcc/g++是一个编译器。

预处理:头文件展开、条件编译、宏替换、去注释
编译:C语言汇编语言
汇编:汇编->可重定位目标二进制文件,不可以被执行,bin.obj,只把我们的代码进行翻译形成二进制目标文件
链接:将我们自己形成的.obj文件和库文件进行合并,形成可执行程序。

ESc iso
gcc -o 生成文件名称 源文件
-E 从现在开始进行程序的翻译,但做完预处理后结束 myfile.i
-S 从现在开始进行程序的翻译,做完编译后停下来 myfile.s
-c 从现在开始进行程序的汇编,做完汇编后停下来 myfile.o

链接

我们为什么能在Linux下进行C、C++代码的编写和编译?
答:Linux系统默认已经携带了语言级别的头文件和语言对应的库。

库分为动态库和静态库,本质上库也是文件。

静态库:libxxxxx.a
动态库:libxxxxx.so
区别库时把前缀和后缀去掉,中间的内容就是名字
windows下静态库为.lib文件,动态库为.dll文件
在我们安装VS2022/2019时,重要的一个工作就是下载对应的头文件和库文件!

我们所使用的指令有相当一部分是使用C写的!如何看待指令呢?指令就是程序、工具。

  1. 库分为静态库(专门让编译器对用户的程序进行静态链接的)和动态库(专门让编译器对用户的程序进行动态链接的)
  2. 静态库和静态链接:链接的时候,如果是静态链接,找到静态库,拷贝静态库中的我所需要的代码到我自己的可执行程序中。
  3. 动态库和动态链接:链接的时候,如果是动态链接,找到动态库,拷贝动态库中的我所需要的代码的地址到我自己的可执行程序中相关的位置。
  4. 静态链接成功:我们的程序,不依赖任何库,自己就可以独立运行。
  5. 动态链接成功:我们的程序,依赖动态库,一旦动态库缺失,我们的程序便无法运行。
  6. 静态库:因为自身拷贝的问题,比较浪费控件。
  7. 动态库:因为可以做到被大家共享方法,所以真正的实现永远都是在库中,程序内部只有地址,比较节省空间。
  8. 静态库vs动态库:Linux默认使用的是动态链接和动态库,gcc -static可以进行静态链接。

云服务器安装的Linux大多默认为动态链接,静态链接安装指令:yum install glibc-static libstdc+±static -y

假如我们是程序,当我们需要电脑时,可以选择去网吧(动态库),需要记住网吧(动态库)地址,也可以自己买一台电脑回家(静态库),要花(内存)买回家。

make与makefile

makefile是围绕依赖关系和依赖方法构建的一个自动化编译工具。

依赖关系与依赖方法
make:myfile.o
gcc -c -o myfile myfile.s
make:myfile.s
gcc -S -o myfile.s myfile.i
make:myfile.i
gcc -E -o myfile.i myfile.c

执行顺序类似“栈”,是根据依赖关系来寻找所需要的文件的

makefile:test.c
gcc -o test test.c
!PHONY:clean
clean:
rm -f test

添加信任用户
/etc/sudoers

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梅八格

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

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

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

打赏作者

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

抵扣说明:

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

余额充值