【lesson6】gcc和动静态库介绍

news2024/9/22 7:28:18

文章目录

  • gcc介绍
  • gcc使用
    • gcc -E
    • gcc -S
    • gcc -c
    • gcc *.o
    • gcc *.c一步到位翻译
  • 动静态库介绍
  • 动态链接和静态链接
    • 动态链接
    • 静态链接
    • 动静态链接总结

gcc介绍

gcc是一款翻译器,专门用来翻译C语言文本的翻译器。
程序的翻译过程:
C文本---->计算机二进制可执行程序的过程
期间经历的4个过程
1.预处理
2.编译
3.汇编
4.链接
预处理工作
1.去注释2.宏替换3.头文件展开4.条件编译等等
编译工作
把C代码转化成汇编代码
汇编工作
把汇编代码转化成可重定向二进制文件
链接工作
链接多个.o文件合并成可执行程序

gcc使用

gcc -E

功能:从.c文件开始翻译程序,如果预处理阶段完成则停下来,并保存期间形成的文件。
在这里插入图片描述
接下来我们用一段代码来测试一下看预处理阶段是不是完成之前所讲的哪些工作。
测试代码:
在这里插入图片描述
测试结果:
在这里插入图片描述
在这里插入图片描述
从图片结果中可以看出确实,完成了上面之前预处理所讲的哪些工作。

gcc -S

功能:从.c文件或者.i文件,开始翻译程序,如果编译阶段完成则停下来,并保存期间形成的文件。
在这里插入图片描述
从图中我们可以看到确实生成了test.s文件,那么到底是不是汇编代码呢?我们进入test.s文件看一下。
在这里插入图片描述
从图中的代码我们可以看到确实是汇编代码。

gcc -c

功能:从.c或者上面生成的任何一个文件开始,如果汇编阶段完成则停下来,并保存期间生成的文件。
在这里插入图片描述
我们进入其中看看是不是二进制文件
在这里插入图片描述
我们可以看到确实是意图我们看不懂的由一堆二进制构成的字符。
那么问题来了这个文件能执行吗?
在这里插入图片描述
我们可以看到这个文件没有可执行的权限,所以不能执行。那么如果加上可执行的权限呢?
在这里插入图片描述
我们可以看到确实就算加上可执行,.o文件也不能被执行。那么为什么呢?因为还差一个链接的阶段。

gcc *.o

功能:链接.o文件形成可执行程序
在这里插入图片描述
我们可以看到最后确实成功的生成了可执行。
那么这时候就有人问了生成可执行程序这么难吗?要这么多步骤,步骤确实这么难,但是我们自己翻译的时候可以一步到位不用这么难。

gcc *.c一步到位翻译

功能:直接从.c文件生成可执行
在这里插入图片描述

动静态库介绍

由上面我们可以知道翻译的最后一步是要链接,那么到底要链接什么呢?其实是要链接库,如果C语言没有库的话,那么你写个printf都会报错。
在这里插入图片描述
上面图就是我们刚才上面的程序所用到的库

那么动态库和静态库有什么区别呢?
Linux下:
动态库以.so结尾
静态库以.a结尾
Windows下:
动态库以.d结尾
静态库以.lib结尾

我们以前学C/C++的时候会安装vs2019或者其它vs,之前我们认为是在安装软件,现在应该明白了其实是在安装库。

动态链接和静态链接

动态链接

下面讲一则故事来讲解动态链接
背景介绍:
有一座学校(华侨中学),学校具有高中部和初中部,在学校的旁边具有一间网吧(E吧)。
在这里插入图片描述
人物介绍:
在这里插入图片描述
故事开始:
小华作为一名高一新生,非常喜欢学习编程但是华侨中学的校规校纪非常严格不允许带任何电子设备,苦于无奈小华只能找学长问学校周围有为有网吧。
在这里插入图片描述
小华的得知学校旁边有电脑于是,开始做计划计划清单,计划每天花点时间去学编程。
在这里插入图片描述
每天到了学编程的时间小华总是跑去网吧,结束就回到宿舍
在这里插入图片描述
然后继续执行清单的任务
小华执行清单的过程就像程序运行的过程,当程序需要用到库的时候,程序就自己去调用库的地址。

静态链接

下面用一个故事来介绍一下静态链接
背景:还是之前那个小华,经过了三年的努力终于考上了北清大学。北清大学旁边也有一间网吧(京华网吧)。

在这里插入图片描述
小华考上了大学,大学比较开放允许学生带电子设备,小华的爸爸给他买了一台 京华网吧的台式机电脑放在他的宿舍,接下来小华就再也不用去网吧学习编程了。小华只要在宿舍里就能学习编程。
在这里插入图片描述
上面的故事就是静态链接,静态链接就是把库的内容放在C语言文件中,这样就不用再去库中寻找内容。

动静态链接总结

动态链接将库中我要的方法的地址填入我的可执行程序中,建立关联
静态链接将库中方法的实现真正的拷贝到我们的可执行程序中
演示
在这里插入图片描述
从上图中我们可以明显看到静态链接的文件比动态链接大
估计大部分人的gcc的静态链接都用不了。因为大部分linux都没有安装C静态库和C++静态库
在这里插入图片描述
所以只要执行下面这条指令,输入用户密码即可。

在这里插入图片描述
g++的几乎所有情况都与gcc差不多这里就不介绍怎么使用g++了。
下面是C++的静态库安装指令
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/802056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt5.14.2+VS2019配置MSVC2017

问题: The compiler " Microsoft Visual C Compiler 16 . 11 . 32106 . 194 ( amd64 x86 )( x86-windows-msvc2019-pe-32bit ) cannot produce code for the Qt version " Qt5.14.2 MSVC2017 64bit " ( x86-windows-msvc2017-pe-64bit 编译器“…

Docker安装部署ShardingProxy详细教程

🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜&…

求整数中的最大值

才用打擂台的形式,先放一个数max在擂台上,然后每个数都上去和他比较,如果上去的那个数比max大,那么就把max替换成那个数站在擂台上,依次比较,直到所有数都比较完后,站在擂台上的那个max就是最大…

码元、波特率、比特率、频带利用率及数字通信系统的可靠性指标

文章目录 前言一、码元二、码元传输速率 R B R_B RB​(传码率、波特率)三、信息传输速率 R b R_b Rb​(传信率,比特率)四、 R B R_B RB​ 和 R b R_b Rb​的关系——H(信源的熵) 为纽带五、频带…

四步从菜鸟到高手,Python编程真的很简单(送书第一期:文末送书2本)

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我…

使用多个神经网络进行细菌分类(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Web课堂笔记

Web课堂笔记 文章目录 Web课堂笔记第一周html部分CSS部分php部分 第二周B/S工作原理http协议**块标记** 第三周标准盒状模型标签优先级**伪类选择器**伪元素派生选择器 第四周Flex布局多媒体查询下拉菜单作业 第五周创建一个NodeLocalStorage 和 SessionStorge 异同JQuery作业 …

小米面试题解析:深入剖析final、finally、finalize的区别

大家好,我是你们的小米!今天我要和大家聊一聊在编程中常常让人迷惑的三个词:final、finally 和 finalize。这些词看似相似,但实际上在Java编程中有着截然不同的作用。如果你在面试中遇到相关问题,可千万别慌张&#xf…

ppt怎么压缩到10m以内?分享好用的压缩方法

PPT是一种常见的演示文稿格式,有时候文件过大,我们会遇到无法发送、上传的现象,这时候简单的解决方法就是压缩其大小,那怎么才能将PPT压缩到10M以内呢? PPT文件大小受到影响的主要因素就是以下几点: 1、图…

Mac下certificate verify failed: unable to get local issuer certificate

出现这个问题,可以安装证书 在finder中查找 Install Certificates.command找到后双击,或者使用其他终端打开 安装完即可

面试还不懂 Redis 与 MySQL 数据一致性,看这篇就够了

1. 什么是数据库与缓存一致性 数据一致性指的是: 缓存中存有数据,缓存的数据值 数据库中的值; 缓存中没有该数据,数据库中的值 最新值。 反推缓存与数据库不一致: 缓存的数据值 ≠ 数据库中的值; 缓…

【雕爷学编程】MicroPython动手做(11)——搭建掌控板IDE开发环境四种

为了能够打好基础,系统学习MicroPython,特地入手了二块掌控板 知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通…

数字人解决方案——NeRF实现实时对话数字人环境配置与源码

前言 1.这是一个能实时对话的虚拟数字人demo,使用的是NeRF(Neural Radiance Fields),训练方式可以看看我前面的博客。 2.文本转语音是用了VITS语音合成,项目git:https://github.com/jaywalnut310/vits . 3.语言模型是用了新开…

Oracle 最高安全架构

​在当今世界中,数据库是存储敏感信息的宝贵资料库,攻击者总是在寻找目标。这导致网络安全威胁的增加,因此有必要采取适当的保护措施。Oracle Maximum Security Architecture(MSA)就是一种提供数据库端到端安全的解决方…

YOLOv6 论文学习

1. 解决了什么问题? 吸收了学术圈和工业界最新的目标检测方法,包括网络结构、训练策略、测试技巧、量化和优化方法。 作者有如下几点发现: 目前还没有人深入研究 RepVGG 重参数化对检测任务的影响。直接缩放 RepVGG 模块的效果并不好&…

苹果电脑系统优化工具:Ventura Cache Cleaner for mac

Ventura Cache Cleaner for Mac是一款专门为苹果电脑开发的系统优化工具,旨在帮助用户清理和优化Mac电脑,提高系统性能和速度。该软件由美国公司Northern Softworks开发,已经推出了多个版本,适用于不同版本的Mac操作系统。 Ventu…

pdf文件太大了不能上传怎么办?这几招值得学

PDF文件是一种常见的文档格式,但有时会遇到文件太大无法上传的问题,这时候简单的做法就是直接压缩文件的大小,但很多朋友还不知道怎么操作,下面就给大家介绍几个简单好用的,一起来看看吧。 工具一、嗨格式压缩大师 这…

二十七、响应式布局练习- 美图导航栏1

目录: 准备工作界面结构开发样式设计 - style.less 一、准备工作 开发响应式设计的网页需要注意以下几点: 1.移动端优先 - 先写完移动端的界面,再写网页。 因为现在都是手机用的比较多; 2.渐进增强 - 当移动端写完后,…

【Spring Cloud Gateway 新一代网关】—— 每天一点小知识

💧 S p r i n g C l o u d G a t e w a y 新一代网关 \color{#FF1493}{Spring Cloud Gateway 新一代网关} SpringCloudGateway新一代网关💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客&a…

js学习 记录(二)

js学习 记录(二) 匿名函数 函数表达式