当前位置: 首页 > news >正文

Linux笔记_gcc

Linux_gcc

  • 程序的翻译
  • 链接
  • make与makefile

关于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

http://www.lryc.cn/news/10367.html

相关文章:

  • 2023美赛MCM A题 详细思路
  • c#: NetTopologySuite凹凸多边形计算
  • NFT Insider #86:A16z 领投,YGG 获得 1380 万美元融资,The Sandbox与《北斗神拳》合作
  • Sort_Algorithm
  • 【初探人工智能】2、雏形开始长成
  • 【LeetCode】剑指 Offer(2)
  • 【JavaSE】Lambda、Stream(659~686)
  • 有限差法(Finite Difference)求梯度和Hessian Matrix(海森矩阵)的python实现
  • day33 贪心算法 | 1005、K次取反后最大化的数组和 134、加油站 135、分发糖果
  • 《蓝桥杯每日一题》递推·AcWing 3777. 砖块
  • mysql读写分离(maxscale)
  • 第八章 - 数据分组( group by , having , select语句顺序)
  • Git(GitHub,Gitee 码云,GitLab)详细讲解
  • 策略模式(Strategy Pattern)
  • 《Qt6开发及实例》6-2 Qt6基础图形的绘制
  • LeetCode 382. 链表随机节点
  • iOS开发AppleDeveloper中给别人授权开发者权限后,对方一直显示不了我的开发账号team
  • FreeRTOS数据类型和编程规范
  • 【python知识】win10下如何用python将网页转成pdf文件
  • C语言常见关键字
  • 【MT7628】固件开发-SDK4320添加MT7612E WiFi驱动操作说明
  • 如何从手工测试进阶自动化测试?阿里10年测开经验分享...
  • C++复习笔记11
  • 【MT7628】固件开发-SDK4320添加MT7628 WiFi驱动操作说明
  • C#开发的OpenRA游戏加载界面的实现
  • 渲染农场优势是什么_云渲染农场怎么用?
  • SoapUI、Jmeter、Postman三种接口测试工具的比较分析
  • Python内置函数 — sort,sorted
  • mysql事务隔离级别
  • 【C++】string类(下)