【Linux】开发工具

目录

  • Linux编译器-gcc/g++使用
    • 执行命令:
    • 我们的.o和库是如何链接的?
  • make/Makefile
    • 依赖关系、依赖方法

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

gcc只能编译c语言,g++可以编译c语言也可以编译g++
背景知识:

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 连接(生成可执行文件或库文件)

用vim写出代码后gcc运行

在这里插入图片描述

如果代码编译错误,会有语法提示:

在这里插入图片描述

代码编译成功后会产生一个可执行程序:

在这里插入图片描述


执行命令:

gcc 【文件名】:不加任何选项默认生成可执行程序
在这里插入图片描述


推荐写法:gcc 【源文件名】 -o 【自定义可执行程序名称】gcc -o【自定义可执行程序名称】【源文件名】:生成可执行程序并且可以自定义可执行程序名称,

-o的作用是将生成的可执行程序放到【自定义可执行程序名称】这个文件里去
在这里插入图片描述
在这里插入图片描述


gcc -E 【源文件名】-o【自定义可执行程序名称.i】:只进行预处理,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-E的作用是告诉gcc,从现在开始进行程序的翻译,将预处理工作做完就停下来,不要往后走了!

在这里插入图片描述


gcc -S 【源文件名】-o【自定义可执行程序名称.s】:进行程序的翻译,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-S的作用是告诉gcc,从现在开始进行程序的翻译,将编译工作做完,就停下来!

在这里插入图片描述


gcc -c 【源文件名】-o【自定义可执行程序名称.o】:进行程序的翻译,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-c的作用是告诉gcc,从现在开始进行程序的翻译,将汇编工作做完,就停下来!

.==o文件–》==可重定位目标二进制文件,简称目标文件,.obj文件不可以独立执行,虽然已经是二进制了需要经过 链接 才能执行
在这里插入图片描述

我们的.o和库是如何链接的?

1.动态链接
2.静态链接

库给我们提供方法的实现,方法的实现就是在库当中!
库其实就是把源文件(.C),经过一定的翻译,然后打包 – 只给你提供一个文件即可,不用给你提供太多的源文件,也可以达到隐藏源文件的目的。


在Linux中,编译形成可执行程序,默认采用的就是动态链接 – 提供动态库
查看是否使用动态库的指令ldd
在这里插入图片描述
查看是动态库还是静态库的指令file

在Linux中,如果要按照静态链接的方式,进行形成可执行程序,需要添加-static选项 – 提供静态库:gcc mycode.c -o 【自定义文件名】 -static
在这里插入图片描述

Linux中是没有安装静态库的,需要自己安装
C语言:sudo yum install -y glibcstatic
C++: sudo yum install -ylibstdc++-static

动态库因为是共享库,有效的节省资源(磁盘空间,内存空间,网络空间等)[优]
动态库一旦缺失,导致各个程序都无法运行[缺点]
静态库,不依赖库,程序可以独立运行[优点],
体积大,比较消耗资源[缺]

在这里插入图片描述
在这里插入图片描述

make/Makefile

make是一个命令
makefile是一个文件,当前目录下的文件

依赖关系、依赖方法

在这里插入图片描述

在这里插入图片描述
make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!(在文件内容和属性没有被修改的情况下,一般只会编译1次):
在这里插入图片描述

一定是源文件形成可执行,现有源文件,才有可执行,一般而言,源文件的最近修改时间 比 可执行文件要老的
如果我们更改了源文件,历史上曾经还有可执行,那么源文件的最近修改时间,一定要比可执行程序要新!

只需要比较,可执行程序的最近修改时间 和 源文件的最近修改时间
.exe 新于 .c 源文件是老的,不需要重新编译
.exe 老于 .c 源文件是老的,需要重新编译

查看文件的时间的指令stat 【文件】Modify:文件内容,Change:文件属性)
在这里插入图片描述

如果想要一直被执行:.PHONY(伪目标)

在这里插入图片描述
在这里插入图片描述


特殊符号:$@ $^
在这里插入图片描述


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

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

相关文章

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态,荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景,将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类,包…

JS清除字符串中的空格

一、replace()方法 replace方法在字符串中搜索值或正则表达式,返回已替换值的新字符串,不会更改原始字符串。 去除字符串内所有的空格:str str.replace(/\s*/g,“”) 去除字符串内两头的空格:str str.replace(/^\s*|\s*$/g,“…

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法

相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息,尤其是采用SSD固态硬盘的MacBook系列,120G的硬盘空间本就捉襟见肘,使用一段时间后,即使自己没有存放很多大文件, Mac的磁盘很快就满了。那么&#xff…

使用python实现http协议的方法

要使用Python编写一个接口,其入参格式为x-www-form-urlencoded,你可以使用requests库。requests库是一个流行的HTTP库,它使得发送HTTP请求变得非常简单。 下面是一个简单的示例,展示如何使用requests库发送一个POST请求&#xff…

【面试经典150 | 链表】两数相加

文章目录 写在前面Tag题目来源题目解读解题思路方法一:模拟 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到…

升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败

升级 IDE Xcode 15 后本地模拟器 Simulator 全被清空,反复重新尝试 Get 下载频频因网络异常断开而导致失败 ... 注:通过 Get 方式下载一定要保证当前网络环境足够平稳,网络环境不好的情况下该方法几乎成不了 解决办法 Get 方式行不通可以尝试通过 官网 途径先下载 模拟器安装包…

大模型 | NEFTune之引入随机噪声对大模型训练的收益

大模型 | NEFTune之引入随机噪声对大模型训练的收益 paper中提到,在模型foward过程中,对inputs_embedding增加适度的随机噪声,会带来显著的收益。 Paper: https://arxiv.org/pdf/2310.05914.pdf Github: https://github.com/neelsjain/NEFT…

网络攻击的发展

在当今数字化时代,网站被攻击已经成为常态,网络威胁愈演愈烈。这些攻击不仅威胁到企业的安全,还可能导致严重的商业危机。本文将探讨为什么网络流量攻击变得如此普遍和容易,并分析未来可能引发的商业危机。 ​ 网络流量攻击的普遍…

【OpenCV实现图像的几何变换】

文章目录 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像变换小结 概要:OpenCV实现图像的几何变换、图像阈值和平滑图像 使用OpenCV库进行图像处理的三个重要主题:几何变换、图像阈值处理以及图像平滑。在几何变换部分,详细…

【Linux精讲系列】——yum软件包管理

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:Linux系统软件包管理工具yum讲解 😄每日一言:踏向彼岸的每一步,都是到达彼岸本身。 目录 前言 Linux系统下的软件下载方式 yum 查看软件包 如何安装软件 如何卸…

myTracks for Mac:GPS轨迹记录器的强大与便捷

你是否曾经在户外活动或旅行中,希望能够记录下你的移动轨迹?或者在工作中,需要跟踪你的行程路线?myTracks for Mac 是一款强大的 GPS 轨迹记录器,它可以帮助你实现这些愿望。 myTracks 是一款专门为 Mac 设计的 GPS 轨…

微信JSAPI支付对接

简介 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。 应用场景 JSAPI支付适用于线下场所、公众号场景和PC网站场景。 商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调…

机器学习-学习率:从理论到实战,探索学习率的调整策略

目录 一、引言二、学习率基础定义与解释学习率与梯度下降学习率对模型性能的影响 三、学习率调整策略常量学习率时间衰减自适应学习率AdaGradRMSpropAdam 四、学习率的代码实战环境设置数据和模型常量学习率时间衰减Adam优化器 五、学习率的最佳实践学习率范围测试循环学习率&a…

【spark客户端】Spark SQL CLI详解:怎么执行sql文件、注释怎么写,支持的文件路径协议、交互式模式使用细节

文章目录 一. Spark SQL Command Line Options(命令行参数)二. The hiverc File1. without the -i2. .hiverc 介绍 三. 支持的路径协议四. 支持的注释类型五. Spark SQL CLI交互式命令六. Examples1. running a query from the command line2. setting Hive configuration vari…

缓解光纤激光切割机老化之如何保养光纤激光切割机的光学镜片

激光切割头具备极高的精密度和昂贵的价格,是光纤激光切割机最关键的运行部分之一。在日常的光纤激光切割机维修过程中频繁出现的关于切割头使用寿命的问题就是内部光学镜片的污染及损坏。 部分导致光纤激光切割机激光切割头光学镜片污染的原因主要包括:对…

【APP VTable】和市面上的 Table 组件一样,都是接收表格[] 以及数据源[]

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; uni-app | 小程序开发 开发工具&#xff1a;HBuilderX 这里写目录标题 表格组件USE 表格组件 <template><view class"scroll-table-wrapper"><view class"scroll-table-container"…

iOS安全加固方法及实现

​ 目录 iOS安全加固方法及实现 摘要 引言 iOS安全加固方法及实现 一、字符串加密 二、类名方法名混淆 三、程序代码混淆 四、加入安全SDK 总结 参考资料 摘要 本文介绍了iOS平台下的应用安全保护方法&#xff0c;包括字符串加密、类名方法名混淆、程序代码混淆和加入…

杂牌行车记录仪特殊AVI结构恢复案例

最近遇到一个杂牌的行车记录仪需要恢复数据&#xff0c;其使用AVI格式&#xff0c;但是在扫描恢复的过程中却发现厂家对其AVI结构进行了“魔改”致程序无法正常识别 故障存储:16G SD卡 fat32文件系统 故障现象: 16G的SD卡&#xff0c;在发生事故后客户尝试自行接到手机上读…

项目进度延误,危机管理5大注意事项

项目延误危机管理的重要性是不可忽视的。项目延误可能会导致资源浪费、成本增加、客户不满、信誉受损等一系列问题&#xff0c;严重影响项目的成功与效益。因此&#xff0c;有效地进行项目延误危机管理是至关重要的&#xff0c;一般主要是从以下5个方面进行管理&#xff1a; 1、…

《动手学深度学习 Pytorch版》 10.6 自注意力和位置编码

在注意力机制中&#xff0c;每个查询都会关注所有的键&#xff0d;值对并生成一个注意力输出。由于查询、键和值来自同一组输入&#xff0c;因此被称为 自注意力&#xff08;self-attention&#xff09;&#xff0c;也被称为内部注意力&#xff08;intra-attention&#xff09;…