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

Linux 开发工具

1.sudo白名单

我们如果要让普通用户有sudo的权限

我们就要登录root用户

在/etc/sudoers目录下

通过文本编辑器(我用的是vim)

将要添加的用户 直接添加进去 如下图光标行就是我添加的白名单用户

然后我们添加的这个ly_centos就有sudo的权限了 

2.gcc/g++相关指令

(1)gcc/g++  c/cpp文件

这个指令实际上依次执行了预处理、编译、汇编、链接四个阶段,最终生成可执行文件

同时 ./a.out就是执行这个可执行程序 

那如果是单步骤呢?

比如说我只想预处理 或者只想要编译后的文件 怎么办?

我们先来了解一下文件的四个步骤

1.预处理

2.编译(生成汇编)

3.汇编

4.链接

(2)-o
 -o TEST.q:指定输出文件(Output)
  • 作用
    将处理结果输出到 TEST.q 文件中,而非默认的标准输出(屏幕)。
    -o 后必须紧跟输出文件名。

  • 如果没有文件名编译器会创建

(3)-E
-E:仅预处理(Preprocessing)
  • 作用
    停止在预处理阶段,不进行编译、汇编和链接。
    会展开所有 #include 头文件、替换 #define 宏,并处理条件编译指令(如 #ifdef)。

(4)- S

g++ -S 的主要功能是将 C++ 源代码转换为汇编语言代码。在执行这个命令后,不会进一步把汇编代码编译成机器码

 

我们发现 无论是cpp文件还是说cpp预处理后的文件 我们都可以用-S

(5)-D

g++ -D 是一个在编译 C++ 程序时非常实用的命令行选项,它的主要作用是在编译过程中定义宏。 

这个地方我通过g++  -D  定义了LY所以这可执行文件才会打印alrealdy defined

这个地方英文打错了 但是不必在意这些细节

(6)-c

g++ -c 是编译 C++ 程序时的常用命令组合,主要用于将源代码转换为目标文件(object file)也就是机器能识别的二进制编码,但不进行链接操作。 

和-S一样

我们发现 无论是cpp文件还是说cpp预处理后的文件还是说编译后的文件 我们都可以用-c

我们再来介绍一下库

什么是库?

我们 的头文件就是库 比如说#include<stdio.h>

库分为静态库和动态库、

那么 什么是静态库什么是动态库呢?

比如说我要用printf

就要用到stdio.h这个库

如果是动态库 就是我们把我们要printf的内容去到这个动态库里面处理

其他所有文件公用这一个动态库 如果你把这个动态库删了 就会导致其他文件的printf用不了

静态库就是说我把stdio.h这个库里面内容拷贝到本地 我们直接把要printf的内容在本地处理

在windows下
.dll的是动态库

.lib的是静态库

在linux下

.so是动态库

.a是静态库 

我们的机器上一般会默认安装动态库 不会安装静态库

如果我们要暗转gcc的静态库可以这样

​
sudo yum install -y glibc-static​

 如果是g++就是这样

sudo yum install -y libstdc++-static
(7)-static

欧克那么我们一般编译器都是动态链接 那如果我们想用静态链接呢?

我们可以通过直接的-static选项实现静态链接

我们会发现 静态链接后文件的大小明显比默认的动态链接大很多

因此我们可以知道 动态库和静态库的优缺点

动态库是共享库 可以有效的节省资源 但是动态库一旦缺失会导致各个程序都无法进行

 静态库虽然不依赖库 程序可以独立进行 但是体积大比较消耗资源!!!

我们没有静态库是不可以-static的

没有动态库有静态库 编译器可以找到静态库 因为编译器是先找到动态库 找不到再找静态库

-static的本质上改变优先级 

(8)-g 

也就是按照debug形式处理 

当然debug和static可以同时用

3.ldd指令 

ldd指令可以查看所执行程序所依赖的所有动态库 

像这样 我们不仅可以查看我们自己生成的a.out文件所依赖的动态库 同时也可以查看 一些指令所依赖的动态库 毕竟linux里面一切皆文件嘛!!!

4.readlf -S

读取可执行文件的二进制构成

把不同区域布局打印处来 

同时我们也可以用这个指令发现

g++ -g确实有有debug特有的部分

而没有后缀的 g++是不会有debug的特有部分

4.make/makefile

make是一条指令

makefile是当前路径下的一个文件 

我们首先创建makefile这个文件

在makefile内部 第一行我们写的是依赖关系 第二行写的是依赖方法

第二行必须以table开头 

其次当我们写完之后 我们直接make

我们还要再写一个清理项目文件

clean的 没有任何依赖关系 所以直接空着

第二行就写清理的操作

由于一些原因我们要加上.PHONY:关键字

写完之后我们就可以使用make clean了

(5)file指令

用于识别文件类型。它通过分析文件的内容、结构和特征(而非文件名或扩展名)来确定其真实类型。 

比如像这个地方的a.out 文件和cpp文件 

http://www.xdnf.cn/news/9750.html

相关文章:

  • 第6讲、 Odoo 18 `tools` 模块深度分析
  • leetcode450.删除二叉搜索树中的节点:递归法利用有序性处理四种删除场景
  • 动态规划法在解决实际问题中的应用
  • RPG改进1.轻击与重击的搭配与连续释放
  • Java设计模式之中介者模式详解
  • 【科研绘图系列】R语言绘制森林图(forest plot)
  • json中对象转字符串和字符串转对象的方法
  • RISC-V PMA、PMP机制深入分析
  • Java -- 并发编程
  • 【图像处理基石】立体匹配的经典算法有哪些?
  • CTA-861-G-2017中文pdf版
  • Java面试实战:从Spring Boot到微服务与AI的全栈挑战
  • 无人机报警器探测模块技术解析!
  • 如何打造一份出色的技术文档?
  • YOLOv8 实战指南:如何实现视频区域内的目标统计与计数
  • 软考-系统架构设计师-第十五章 信息系统架构设计理论与实践
  • 互联网大厂Java求职面试:AI大模型融合下的企业知识库架构设计与性能优化
  • 重温经典算法——插入排序
  • Python进阶【四】:XML和JSON文件处理
  • vue3 导出excel
  • MySQL高可用方案:Keepalived+双主库架构深度解析与实战指南
  • 【笔记】suna部署之获取 Firecrawl API key
  • 安卓添加设备节点权限和selinux访问权限
  • 如何通过数据分析优化项目决策
  • t009-线上代驾管理系统
  • kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)
  • 微服务测试困境?Parasoft SOAtest的自动化、虚拟化与智能分析来袭!
  • WPF-Prism学习笔记之 “导航功能和依赖注入“
  • React 微应用接入:qiankun 深度集成实战
  • 如何在 Ubuntu 24.04 服务器上安装 Apache Solr