Linux 开发工具

article/2025/9/8 20:56:49

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.hkcw.cn/article/FwaNmVpMaU.shtml

相关文章

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…

从数据持久化到网络通信与OpenCV:Qt应用程序开发的深度探索与实战

文章目录 前言一、QSettings&#xff1a;轻量级数据持久化方案1.1 QSettings 主要特点1.2 QSettings 常用函数整理 二、数据库2.1 连接SQLite数据库2.2 建表2.3 增删改 三、网络编程3.1 网络分层3.2 IP地址3.3 端口号3.4 基于TCP的Socket通信3.4 相关接口3.4.1核心类3.4.2 通信…

【产品经理从0到1】自媒体端产品设计

后台的定义 “后台” 与“前台”都是相对独立的平台&#xff0c;前台是服务于互联网用户的平台 &#xff0c;后台主要是支撑前台页面内容、数据及对前台业务情况的统计分析的系统&#xff1b; 后台与前台的区别 第1&#xff1a;使用用户不同 前台用户&#xff1a;互联网用户…

Ubuntu20.04操作系统ssh开启oot账户登录

文章目录 1 前提2 设置root密码3 允许ssh登录root账户3.1 编辑配置文件3.2 重启ssh服务 4 安全注意事项 1 前提 ssh可以使用普通用户正常登录。 2 设置root密码 打开终端&#xff0c;设置密码 sudo passwd root # 设置root密码3 允许ssh登录root账户 3.1 编辑配置文件 su…

四叉树实现四边形网格

import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as np # 四叉树节点 class QuadNode:def __init__(self, x, y, width, height, depth):self.x xself.y yself.width widthself.height heightself.depth depthself.children []self.…

园区智能化集成平台汇报方案

该方案为园区智能化集成平台设计,依据《智能建筑设计标准》等 20 余项国家与行业规范,针对传统园区信息孤岛、反应滞后、经验流失、管理粗放等痛点,构建可视化智慧园区管理平台,实现大屏数据可视化、三维设备监控、智慧运维(含工单管理、巡检打卡)、能源能耗分析、AI 安防…

C#中的BeginInvoke和EndInvoke:异步编程的双剑客

文章目录 引言1. BeginInvoke和EndInvoke的基本概念1.1 什么是BeginInvoke和EndInvoke1.2 重要概念解释 2. 委托中的BeginInvoke和EndInvoke2.1 BeginInvoke方法2.2 EndInvoke方法2.3 两者的关系 3. 使用方式与模式3.1 等待模式3.2 轮询模式3.3 等待句柄模式3.4 回调模式 4. 底…

基于通义千问的儿童陪伴学习和成长的智能应用架构。

1.整体架构概览 我们的儿童聊天助手将采用典型的语音交互系统架构,结合大模型能力和外部知识库: 2. 技术方案分解 2.1. 前端应用/设备 选择: 移动App(iOS/Android)、Web应用,或者集成到智能音箱/平板等硬件设备中。技术栈: 移动App: React Native / Flutter (跨平台…

【STIP】安全Transformer推理协议

Secure Transformer Inference Protocol 论文地址&#xff1a;https://arxiv.org/abs/2312.00025 摘要 模型参数和用户数据的安全性对于基于 Transformer 的服务&#xff08;例如 ChatGPT&#xff09;至关重要。虽然最近在安全两方协议方面取得的进步成功地解决了服务 Transf…

MyBatisPlus(1):快速入门

我们知道&#xff0c;MyBatis是一个优秀的操作数据库的持久层框架&#xff08;优秀持久层框架——MyBatis&#xff09;&#xff0c;其基于底层的JDBC进行高度封装&#xff0c;极大的简化了开发。但是对于单表操作而言&#xff0c;我们需要重复地编写简单的CRUD语句。这其实是不…

【ARM】【FPGA】【硬件开发】Chapter.1 AXI4总线协议

Chapter.1 AXI4总线协议 作者&#xff1a;齐花Guyc(CAUC) 一、总线介绍 AXI4总线 AXI4总线就像是SoC内部的“高速公路”&#xff0c;负责在不同硬件模块之间高效传输数据。 AXI4协议通过 5个独立通道 传输数据和控制信号&#xff0c;每个通道都有自己的信号线&#xff0c;互…

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 目录 .NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 一、背景与技术概述 1.1 AOT 编译技术简介 1.2 Go 语言与 .NET 的互补性 二、.NET 7 AOT 编译实践 2.1 环境准备 2.2 创建 AOT 项目 2.3 AOT 编译流程 2.4 调试信息处…

Shortest path 代码

Project https://graphics.cs.utah.edu/research/projects/shortest-path-to-boundary/ Build and Debug Fork:(在Win10上&#xff09; https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes commit hash d3160168d2b6a58188d12e6cd959da…

Spring框架学习day1--基础概念

Spring基础部分**轻量级的**IOC&#xff1a;控制反转&#xff08;对象由自己管理变成交给框架管理&#xff09;AOP&#xff1a;面向切面编程一站式BaenSpring体系结构 Spring Hello World 搭建 Spring基础部分 Spring是一个轻量级的IOC、AOP的一站式java开发框架&#xff0c;为…

立志成为一名优秀测试开发工程师(第九天)——使用fiddler工具、request库进行接口测试

接口测试学习 目录 一、接口测试的介绍 二、抓包软件Fiddler的使用 三、使用Python的Request库发送get、post请求&#xff1a; 1.get请求 2.post请求 四、总结 登录接口实现 认证请求处理 异常处理 高级配置 接口测试工具类封装 测试用例设计规范 Cookie处理方案 …

【面板数据】各地区新型数字基础设施数据集(2002-2025年)

新型数字基础设施是利用新一代信息技术&#xff08;如5G、人工智能、物联网、大数据、区块链等&#xff09;构建的基础设施体系&#xff0c;主要服务于信息传输、计算存储、智能分析和融合应用等环节。新型数字基础设施作为引领经济社会数字化转型的重要支撑&#xff0c;在各地…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

zynq ad7616 调试笔记

环境 zynq7020 ps端的spi外接硬件的ad7616模块&#xff08;非ip核&#xff09; 1 下载 https://github.com/analogdevicesinc/no-OS/blob/2019_R1/ad7616-sdz/ad7616_sdz.c 2 在zynq的sdk中新建ad7616的app程序&#xff0c;将上图方框中的文件拷贝过来并编译 3 移植 ad7616…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时&#xff0c;您可能希望将iPhone备份到外部硬盘上&#xff0c;这样可以快速释放iPhone上的存储空间&#xff0c;而不占用电脑上的空间&#xff0c;并为您的数据提供额外的安全性。此外&#xff0c;我们还提供 4 种有效的解决方案&#xff…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew&#xff0c;这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew&#xff0c;请先安装它。安装 Homebrew 后&#xff0c;安装 OpenSSL 只需要一条命令。 步骤 1&#xff1a;安装 Home…