【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】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到…

全栈经验总结(不间断更新)

1.当后端传回来的值为列表套字典[{"id":1,"num":"1"},{"id":2"num":"3"}]&#xff0c;如果要在vue3里面渲染图片&#xff0c;可以这样操作 <el-form-item label"图片&#xff1a;"><el-uploa…

IDEA运行项目报错:Command line is too long的解决办法

文章目录 1.报错现象2.解决办法验证3.最佳实践4.问题原因5.参考文献1.报错现象 在idea中启动一个spring cloud项目时,编译完成后直接报错,报错内容如下: Error running XXXApplication:Command line is too long. Shorten command line for XXXApplication or also for Sp…

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

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

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

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

Centos7 安装 Etcd

Github上下载并解压安装包 wget https://github.com/coreos/etcd/releases/download/v3.4.10/etcd-v3.4.10-linux-amd64.tar.gz tar xzvf etcd-v3.4.10-linux-amd64.tar.gz mv etcd-v3.4.10-linux-amd64 /opt/etcd解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是serve…

网络攻击的发展

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

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

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

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

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

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

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

el-tree业务

<el-form-item label"选择节点" prop"node_ids"><el-checkboxv-if"regionList.length"v-model"selectAll":disabled"selectDisabled":indeterminate"isIndeterminate":show-checkbox"!selectDisabl…

微信JSAPI支付对接

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

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

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

Docker 批量导入镜像

可以编写一个脚本&#xff0c;该脚本循环遍历一个文件夹中的所有镜像存档文件&#xff0c;并使用 docker load 命令加载它们。以下是一个 Bash 脚本示例&#xff1a; #!/bin/bash# 指定存档文件所在的目录 archive_dir"/path/to/archives/"# 遍历存档文件并加载到 D…

十四、城市建成区时空扩张分析——景观格局指数

一、前言 景观格局指数:指景观格局与景观指数,景观格局通常是指景观的空间结构特征,具体是指由自然或人为形成的,一系列大小、形状各异,排列不同的景观镶嵌体在景观空间的排列,它即是景观异质性的具体表现,同时又是包括干扰在内的各种生态过程在不同尺度上作用的结果。…

Shopee新店多久出单?shopee新店如何运营?——站斧浏览器

shopee新店多久出单&#xff1f; 就以店铺每天上新来说&#xff0c;从店铺下来那天开始&#xff0c;每天10-20个产品去上新&#xff0c;正常情况下两周以内你的店铺是一定会有订单产生的。如果一两个月过去了&#xff0c;店铺还是没有单出&#xff0c;那就证明店铺存在很大的问…