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

Linux主要开发工具之gcc、gdb与make

此系列还有两篇,大家想完整掌握可以阅读另外两篇

Linux文本编辑与shell程序设计-CSDN博客

Linux基础知识详解与命令大全(超详细)-CSDN博客 

1.gcc编译系统

1.1 文件名后缀

文件名后缀

文 件 类 型

文件名后缀

文 件 类 型

.c

C源文件

.s

汇编程序文件

.i

预处理后的C源文件

.o

目标文件

.ii

预处理后的C++源文件

.a

静态链接库

.h

头文件

.so

动态链接库

.C   .cc  .cp .cpp  .c++   .cxx

C++源文件

.out

可执行程序文件

1.2 C语言编译过程

        1.预处理阶段

        预处理是常规编译之前预先进行的工作,故此得名。它读取C语言源文件,对其中以“#”开头的指令(伪指令)和特殊符号进行处理。主要包括文件包含、宏定义和条件编译指令。

 

2.编译阶段

编译程序(Compiler)对预处理之后的输出文件进行词法分析和语法分析,试图找出所有不符合语法规则的部分

3.汇编过程

汇编过程是汇编程序(Assembler)把汇编语言代码翻译成目标机器代码的过程

4.连接阶段

连接程序(Linker)要解决外部符号访问地址问题

连接模式分为静态连接和动态连接 

1.3 gcc命令行选项

Linux 系统中, C/C++ 程序编译命令是 gcc ,例如:

            $ gcc  f1.c f2.c  (针对C语言源程序)

      执行完成后,生成默认的可执行文件a.out

1.预处理选项

    C语言预处理程序通常称为cpp,它是宏处理程序,由C编译程序自动调用,在真正的编译过程之前对程序进行转换。

常用选项:

          -o file  

      2.编译程序选项 

选项 

功能

-c

只生成目标文件,不进行连接。用于对源文件的分别编译

-E

只生成预处理文件,不进行编译

-S

只进行编译,不做汇编,生成汇编代码文件格式,其名与源文件相同,但扩展名为.s

-o file

将输出放在文件file中。如果未使用该选项,则可执行文件放在a.out

-g

指示编译程序在目标代码中加入供调试程序gdb使用的附加信息

-v

在标准出错输出上显示编译阶段所执行的命令,即编译驱动程序及预处理程序的版本号

  3 连接程序选项

选项格式

功能

-c   -S    -E

如果使用其中任何一个选项,那么都不运行连接程序,而且目标文件名不应该用做参数

-llibrary

连接时搜索由library命名的库。连接程序按照在命令行上给定的顺序搜索和处理库及目标文件。实际的库名是liblibrary,但按默认规则,开头的lib和后缀(.a.so)可以被省略

-static

在支持动态连接的系统中,它强制使用静态链接库,而阻止连接动态库;而在其他系统中不起作用

-Ldir

把指定的目录dir加到连接程序搜索库文件的路径表中,即在搜索-l后面列举的库文件时,首先到dir下搜索,找不到再到标准位置下搜索

-o file

指定连接程序最后生成的可执行文件名称为file,不是默认的a.out

 1.4 动态链接库与静态链接库

Linux 下库文件的命名有一个约定,所有的库名都以 lib 开头。形如:

      libx.a        其中,x是指定的库名 

.a (归档, archive )结尾的库是静态库,以 .so (共享目标, shared object )结尾的库是动态库
生成静态库的方法实际上可分为两步:

  ① 将各函数的源文件编译成目标文件

  ② 使用ar工具将目标文件收集起来,放到一个归档文件中

动态链接库的生成

          gcc  -c  getdate.c  -shared  -o  libgetdate.so

      静态链接库的生成

          gcc  -c  getdate.c  -o  getdate.o

          ar  -rcs  libgetdate.a  getdate.o

     链接库的使用

    动态:gcc  main.c  -L/root/testgcc  -lgetdate  -o main.out

    静态:gcc  main.c  -static  -L/root/testgcc  -lgetdate  -o main.out

2 gdb程序调试工具

程序中的错误可按性质分为三种:

  1)编译错误,即语法错误。

  2)运行错误。

  3)逻辑错误。

    查找程序中的错误,诊断其准确位置,并予以改正,这就是程序调试,分为人工查错与机器调试。  

2.1 启动gdb和查看内部命令

当程序执行过程中忽然中止,屏幕上显示××××-core dumped消息,然后显示提示符,其中,××××表示出错原因

为了发挥 gdb 的全部功能,需要在编译源程序时使用 -g 选项 。如:

    $ gcc  -g  prog.c  -o  prog  (针对C语言源程序prog.c

    $ gcc  -g  program.cpp  -o  program  (针对C++源程序program.cpp

      启动gdb的方法有以下几种:

    (1) 直接使用shell命令gdb

    (2) 以一个可执行程序作为gdb的参数

       一旦启动gdb,就显示gdb提示符:

    (gdb

      并等待用户输入相应的内部命令

2.2 显示源程序和数据

  1.显示和搜索源程序

1)显示源文件

  利用 list 命令可以显示源文件中指定的函数或代码行

  list                                    list [file:] num  

  list  start , end                  list [file:]function

2)模式搜索

  forward-search  regexp    

  search  regexp  

  reverse-search  regexp

2.查看运行时数据

1print命令     一般使用格式是 :print  [/fmt]  exp

当被调试的程序停止时,可以用 print 命令(简写为 p )或同义命令 inspect 来查看当前程序中运行的数据,比如: print i*j

2gdb所支持的运算符

     用&运算符取出变量在内存中的地址,如:print  &i ,  print  &array[i]

     { type }adrexp表示一个数据类型为type、存放地址为adrexp的数据。

     file :: var  (或者 function :: var )   表示文件file(或者函数function)中变量var的值

3)输出格式

                在print  / fmt  exp 命令中,“ /”之后的fmt是表示输出格式的字母,它由表示格式的字母和表示数据长度的字母组成 。如:
                表示格式 的字母:o    x    d    u    t    f    a    i     c    s
                表示长度的字母:    b      w     h      g

4whatis命令显示出变量的数据类型,如:whatis i

5x命令可以查看内存地址中数据的值 。其使用格式是:

     x  [/fmt]  address

6display命令可以预先设置一些要显示的表达式。其一般格式是:

    display  [/fmt]  exp

   要取消对先前设置的某些表达式的自动显示功能,可以使用以下命令:

     undisplay  [disnum]

     delete display [disnum]

2.3 控制程序的执行

断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),它们统称为停止点

1.设置和显示断点

(1)设置断点:用break命令(其缩写形式为b)设置断点:

break  linenum              break  linenum  if  condition 

break  function              break  file:linenum

break  file:function         break  *address                  break    

(2)显示断点

info  breakpoints  [num]

info  break  [num]

2.设置和显示观察点

(1)设置观察点

  watch expr              rwatch expr             awatch expr

(2)显示观察点

  info breakpoints             info watchpoints

3.设置捕捉点

  命令catch的格式是: catch  event

4.维护停止点

  delete             clear            disable           enable

5.运行程序

  run命令的格式: run  [args]

6.程序的单步跟踪和连续执行

(1)单步跟踪

实行单步跟踪的命令是stepnext,其格式是:

 step  [N]

next  [N]

(2)连续执行

 continuecfg命令

7.函数调用

 call  expr                         return  [expr]

3 程序维护工具make

 3.1 make工作机制

 GNU的make的工作过程如下:

 ① 依次读入各makefile文件;

 ② 初始化文件中的变量;

 ③ 推导隐式规则,并分析所有规则;

 ④ 为所有的目标文件创建依赖关系链;

 ⑤ 根据依赖关系和时间数据,确定哪些目标文件要重新生成;

 ⑥ 执行相应的生成命令。

6.1:某个正在开发的程序由以下内容组成:

(1) 三个C语言源文件:x.cy.cz.c。设x.cy.c都使用了defs.h中的声明;

(2) 汇编语言源文件assmb.s被某个C语言源文件调用;

(3) 使用了在/home/mqc/lib/libm.so中的一组例程。

设最后生成的可执行文件名为prog

 

 3.2 makefile文件

make被调用后会依次查找名为GNUmakefilemakefileMakefile的文件

一个示例 :

prog: x.o  y.o  z.o  assmb.o

        gcc x.o  y.o  z.o  assmb.o  -L/home/mqc/lib -lm  -o prog

x.o:x.c  defs.h

        gcc  -c  x.c

y.o: y.c  defs.h

        gcc  -c  y.c

z.o:z.c

        gcc  -c  z.c

assmb.o:assmb.s

        as  -o  assmb.o  assmb.s

clean:

                rm prog  *.o

Makefile规则有以下通用形式

目标文件:[相依文件…]

<tab>命令1[#注释]

<tab>命令n[#注释]

在格式上应注意

依赖行从一行的开头开始书写
各命令行单独占一行,每个命令行的第一个字符必须是制表符 <tab> ,而不能使用 8 个空格 
# 号后的内容为注释
在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开

依赖关系图

  1. 使用make的一个核心问题是确定好各文件之间的依赖关系。一般来说,生成一个目标文件可能有多个不同的途径,根据这些途径能够指定不同的依赖关系。
  2. make是依据“关系图深度优先搜索”的算法来核查目标文件及相依文件的修改时间,深度相等时,可由左到右依次进行。
  3. 适当地引入中间结果,合理地构造依赖关系图,可以省去一部分编译工作量。但并非层次越多越好,要考虑目标文件的生成过程及其所起的作用。

使用变量:

      变量定义和引用

       1 make的变量(又称做宏定义)一般均由大写字母和数字组成。

        定义变量的一般格式是:

       <变量名>=<字符串>

例如,下面都是合法的变量定义:

      OBJECT=x.o y.o z.o

      LIBES=-lm

引用make变量的方式与引用shell变量类似,即:把变量用圆括号括起来,并在前面加上“$”符号。例如: $(OBJECT)          $(LIBES)

2 make命令有丰富的命令行选项。 例如:

      -C dir       把目录改到dir     

      -d            输出所有的调试信息      

      -e            指明环境变量优先于makefile文件中的变量     

      -f file       使用file文件作为makefile文件     

      -I         忽略在执行重新生成文件的命令的过程中出现的所有错误     

      -I dir –Idir           指定一个包含makefile文件的搜索目录

  3.预定义变量

归档库 :               AR        ARFLAGS
汇编命令:          AS        ASFLAGS
C 编译命令:        CC        CPP         CFLAGS      CPPFLAGS
C++ 编译命令:   CXX       CXXFLAGS

隐式规则:

 在makefile文件中显式地指定了一些规则,称为显式规则

隐式规则就是一种惯例,即预先约定好了,不需要在makefile文件中写出来的规则。

几个常用的隐式规则:

 ① 编译C语言程序的隐式规则 

 ② 编译C++程序的隐式规则

 ③ 汇编和汇编预处理的隐式规则

相关文章:

Linux主要开发工具之gcc、gdb与make

此系列还有两篇&#xff0c;大家想完整掌握可以阅读另外两篇 Linux文本编辑与shell程序设计-CSDN博客 Linux基础知识详解与命令大全&#xff08;超详细&#xff09;-CSDN博客 1.gcc编译系统 1.1 文件名后缀 文件名后缀 文 件 类 型 文件名后缀 文 件 类 型 .c C源…...

23种设计模式-行为型模式-观察者

文章目录 简介问题解决代码关键实现说明 总结 简介 观察者是一种行为设计模式&#xff0c; 允许你定义一种订阅通知机制&#xff0c; 可在事件发生时通知多个“观察/订阅”该对象的其他对象。 问题 假如你有两种类型的对象: 顾客和商店。顾客对某个新品非常感兴趣&#xff0…...

去中心化预测市场

去中心化预测市场 核心概念 预测市场类型&#xff1a; 类别型市场&#xff1a;二元结果&#xff08;YES/NO&#xff09;&#xff0c;例如“BTC在2024年突破10万美元&#xff1f;” 多选型市场&#xff1a;多个选项&#xff08;如总统候选人&#xff09;&#xff0c;赔付基于…...

springboot-ai接入DeepSeek

1、引入pom依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency><dependencyManagement><dependencies><dependency><groupId>o…...

【C语言】数据在内存中的储存(整形)

目录 前言&#xff1a; 预备知识 整数在内存中的储存 原码 反码 补码 总结&#xff1a; 前言&#xff1a; 在上两章中讲解了五大内存函数&#xff0c;其中memchr函数&#xff0c;这个函数考察到数据内存的存储。 接下来为大家讲解整数在内存中的储存。 预备知识 认识…...

PCL 树木树干粗提取(地基数据,TLS)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 主要的思路如下: 1、首先,使用之前的CSF算法提取点云的地面点,在提取的过程中我们可以得到一个布料结构(地面模型)。 2、在得到这个布料结构之后,我们也就可以得到整个地面模型的高度了,之后我们只需要遍历每…...

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定义&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09; 是一种设计思想&#xff1a;对象不再由你自己创建和管理&#xff0c;而是交给 Spring 容器…...

尚硅谷2019版Java集合和泛型

第十一章 Java集合框架 集合框架全景图 mindmaproot((Java集合))Collection单列List有序可重复ArrayListLinkedListVectorSet无序唯一HashSetLinkedHashSetTreeSetMap双列HashMapLinkedHashMapTreeMapHashtablePropertiesToolsCollectionsArrays三大核心接口对比 特性ListSe…...

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

华为eNSP:实验 配置单区域集成ISIS

单区域集成ISIS是一种基于中间系统到中间系统&#xff08;IS-IS&#xff09;协议的网络架构优化方案&#xff0c;主要用于简化网络设计并提升数据传输效率。其核心特点包括&#xff1a; ‌单一区域部署‌ ISIS协议在单一逻辑区域内运行&#xff0c;消除多区域间的分层复杂性&am…...

常见框架漏洞(五)----中间件IIS6

一、【PUT漏洞】 漏洞描述&#xff1a;IIS Server 在 Web 服务扩展中开启了 WebDAV &#xff0c;配置了可以写⼊的权限&#xff0c;造成任意⽂件上传。 版本&#xff1a;IIS 6.0 1. 环境 fofa搜素环境&#xff1a;"IIS-6.0" 或者环境搭建&#xff1a;本地搭建2003…...

leetcode221.最大正方形

class Solution {public int maximalSquare(char[][] matrix) {int result 0; // 记录正方形边长int m matrix.length, n matrix[0].length;int[][] dp new int[m 1][n 1];// 动态规划for (int i 1; i < m; i) {for (int j 1; j < n; j) {if (matrix[i - 1][j - …...

C++实现AVL树

一 AVL树的概念 上上节我们学习了二叉搜索树&#xff0c;他的理想查找的时间复杂度是o(log n)&#xff0c;但是如果是下面这种情况&#xff0c;那么它的时间复杂度就会变成o(n). 这种情况就是出现一边高的那种&#xff0c;它的个数和它的高度相差不大。 那么这样就会把二叉搜索…...

Linux系统安全及应用

目录 一.账号安全措施 1.1系统账号清理 1.1.1将非登录用户的shell设为无法登录 1.1.2删除无用用户 userdel 1.1.3锁定账号文件 1.1.4锁定长期不使用的账号 1.2密码安全控制 1.2.1 对新建用户 1.2.2对已有用户 1.3命令历史限制 1.3.1临时清除历史命令 1.3.2限制命令…...

JAVA反序列化深入学习(十三):Spring2

让我们回到Spring Spring2 在 Spring1 的触发链上有所变换&#xff1a; 替换了 spring-beans 的 ObjectFactoryDelegatingInvocationHandler使用了 spring-aop 的 JdkDynamicAopProxy &#xff0c;并完成了后续触发 TemplatesImpl 的流程 简而言之&#xff0c;换了一个chain&am…...

迭代器运算详解(四十二)

1. 迭代器的随机访问运算 对于 vector 和 string 这样的容器&#xff0c;它们的迭代器支持以下随机访问运算符&#xff1a; 运算符说明iter n返回一个新的迭代器&#xff0c;该迭代器比原来的迭代器 iter 向前移动了 n 个位置&#xff08;即指向后面的第 n 个元素&#xff0…...

Linux中Squid服务常用操作

在 Linux 中 Squid 服务常用操作介绍 1. Squid 基础操作 启动 Squid # 前台启动&#xff08;调试用&#xff09; squid -N -d 1# 后台启动&#xff08;-s 表示将日志输出到 syslog&#xff09; squid -s停止 Squid # 安全停止&#xff08;需配置 pid_file&#xff09; squid…...

Linux操作系统--进程的概念

目录 1.了解进程前的前景知识 冯诺依曼体系结构 操作系统(OS) 2.进程 2.1进程的概念 2.2描述进程-PCB 2.2.1task_struct 2.3查看进程 2.4通过系统调用获取进程的标识符 2.5认识fork()--创建进程 该专栏会持续更新 更新时间一周一更。下周更新内容进程状态 1.了解进程前…...

C++假期练习

思维导图 牛客练习...

HTML零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章&…...

算法竞赛备赛——【图论】链式前向星

图论 图的存储方式&#xff1a; 通用的三种&#xff1a;邻接矩阵、邻接表、边集数组 有向图&#xff1a;十字链表 无向图&#xff1a;多重邻接表 刷题常用&#xff1a;邻接矩阵、链式前向星&#xff08;邻接表变形&#xff09; 链式前向星 算法题常用: 邻接矩阵、二维vector模…...

JAVA_类和对象

目录 1.面向对象的初步认知 1.1.什么是面向对象 1.2.面向对象与面向过程 2.类的定义和使用 2.1.简单认识类 2.2类的定义格式 2.3.练习 学生类 动物类&#xff08;可爱猫猫&#x1f431;&#xff09; 3.类的实例化 3.1.什么是实例化 3.2.类和对象的说明 4.this引用…...

高频面试题(含笔试高频算法整理)基本总结回顾65

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

数据库系统-数据库控制

并发控制 事务的ACID特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务包含的所有操作要么全部成功&#xff08;commit提交&#xff09;&#xff0c;要么全部失败&#xff08;rollback回滚&#xff09;一致性&#xff08;Consistency&#xff09;&a…...

Python Cookbook-5.3 根据对象的属性将对象列表排序

任务 需要根据各个对象的某个属性来完成对整个对象列表的排序。 解决方案 DSU方法仍然一如既往地有效: def sort_by_attr(sed,attr):intermed [ (getattr(x,attr),i,x) for i,x in enumerate(seg)]intermed.sort()return [ x[-1] for x in intermed def sort_by_attr_inpl…...

Java MCP SDK 开发笔记(一)

MCP 简介 AI 大模型诞生之初&#xff0c;其高度模拟人的对话之能力惊为天人。但我们肯定不希望止步于此—— 工具化就是我们希望 AI 能够完成的目标&#xff0c;由此可以从单纯的对话发展为代替繁复人力的“干活”。这条道路上毋庸置疑 AI 大模型任重道远。而 MCP(Model Contr…...

AF3 OpenFoldDataLoader类_prep_batch_properties_probs方法解读

AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类的 _prep_batch_properties_probs 方法是为每个批次数据准备 recycling 维度 的概率分布。它将根据配置文件中的设定为每个批次数据生成 recycling 轮次的概率分布,并存储到 prop_probs_tensor 中,用于后续抽样选择特定…...

寻找字符串数组中的最长共同前缀字符串

问题描述&#xff1a;给定一个字符串数组 strs&#xff0c;编写一个函数来找到这些字符串的最长公共前缀字符串&#xff0c;如果没有则返回空字符串"" 算法思路 横向扫描法&#xff1a; 从数组的第一个字符串开始&#xff0c;逐个和后面的字符串比较&#xff0c;逐…...

leetcode_数组 56. 合并区间

56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;int…...

Jenkins学习(B站教程)

文章目录 1.持续集成CI2.持续交付CD3.持续部署4.持续集成的操作流程5.jenkins简介6.后续安装部署&#xff0c;见视频 bilibili视频 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff08;Hudson是商用的&#xff09;&#xff0c;主要用…...

学习笔记—C++—类和对象(一)

目录 类和对象 类的定义 类定义格式 访问限定符 类域 实例化 实例化概念 对象的大小 this指针 C和C语言实现Stack对比 类和对象 类的定义 类定义格式 ● class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后…...

PyTorch 深度学习 || 6. Transformer | Ch6.3 Transformer 简单案例

1. 简单案例 这个代码是一个简单的 Transformer 模型的实现,这个例子展示了一个基本的序列到序列(seq2seq)任务,比如将一个数字序列转换为另一个数字序列。可以用于学习和理解 Transformer 的基本结构和工作原理。 import torch import torch.nn as nn import math# 位置…...

体育风暴篮球足球体育球员综合资讯网站模板

源码名称&#xff1a;篮球足球体育球员综合资讯网站模板 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop/184016.html …...

Visual Studio Code SSH 连接超时对策( keep SSH alive)

文章目录 问题解决方法一&#xff1a;配置服务端关于ClientAliveInterval和ClientAliveCountMax1、打开终端&#xff0c;打开SSH配置文件&#xff1a;输入以下命令&#xff1a;2、打开配置文件后&#xff0c;添加以下内容&#xff1a;3、添加后&#xff0c;Esc按 <Enter>…...

Docker容器中的ubuntu apt update报错 解决办法

问题现象 # apt update Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB] Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB] Err:2 http://security.ubuntu.com/ubuntu noble-security InRelease At least one invalid signa…...

CV - 目标检测

物体检测 目标检测和图片分类的区别&#xff1a; 图像分类&#xff08;Image Classification&#xff09; 目的&#xff1a;图像分类的目的是识别出图像中主要物体的类别。它试图回答“图像是什么&#xff1f;”的问题。 输出&#xff1a;通常输出是一个标签或一组概率值&am…...

linux提权 corn 提权

corn提权 corn的基本使用方法 corn的作用就是可以定时的完成一下任务&#xff08;如备份一下log 或者清除一下日志文件 这些就是运维人员用的&#xff09; 先找一下定时任务的工作表 cat /bin/corntab 这个是普通用户 我们直接看都看不了 说明什么说明这个 是root高权限执…...

1Panel安装失败 国内docker安装失败

本文仅针对学习交流&#xff0c;只为了帮助计算机相关专业大学生个人技能实操而记录 非学习目的严禁学习&#xff01;&#xff01;&#xff01;否则后果自负 1、离线安装1Panel&#xff08;不需要手动安装docker&#xff0c;离线安装包里包括了docker&#xff09; 离线包下载地…...

Excel + VBA 实现“准实时“数据的方法

Excel 本身是静态数据处理工具,但结合 VBA(Visual Basic for Applications) 可以实现 准实时数据更新,不过严格意义上的 实时数据(如毫秒级刷新)仍然受限。以下是详细分析: 1. Excel + VBA 实现“准实时”数据的方法 (1) 定时刷新(Timer 或 Application.OnTime) Appl…...

请问你怎么看待测试,指导哪些测试的类型,有用过哪些测试方法?

作为深耕测试领域多年的博主,我始终认为测试是软件质量的守护者,更是推动研发流程优化的催化剂。以下从测试认知、分类体系到实战方法论,结合具体案例为你系统拆解: 一、测试的本质认知 测试≠找 Bug,而是通过系统性验证回答三个核心问题: 软件是否符合用户需求?系统在…...

详解 Redis repl_backlog_buffer(如何判断增量同步)

一、repl_backlog_buffer 复制积压缓冲区&#xff08;Replication Backlog Buffer&#xff09; 是一个环形内存区域&#xff08;Ring Buffer&#xff09;&#xff0c;用于临时保存主节点最近写入的写命令&#xff0c;以支持从节点断线重连后的增量同步。 1.1 三个复制偏移量 …...

工业操作系统国产化替代的战略路径与挑战分析

一、政策背景与战略意义 工信部提出的 2027 年替换 80 万套工业操作系统计划&#xff0c;是中国制造业向智能化转型的核心举措。该政策旨在通过国产化替代&#xff0c;解决工业领域 “缺芯少魂” 的问题&#xff0c;构建自主可控的工业软件生态体系。当前&#xff0c;中国工业操…...

JMeter接口性能测试从入门到精通

前言&#xff1a; 本文主要介绍了如何利用jmter进行接口的性能测试 1.在测试计划中添加线程组 1.1.线程组界面中元素含义 如果点击循环次数为永远&#xff1a; 2.添加HTTP取样器 2.1.填写登录接口的各个参数 2.2.在线程组下面增加查看结果树 请求成功的情况&#xff1a; 请求…...

WinForm真入门(9)——RichTextBox控件详解

WinForm中RichTextBox控件详解&#xff1a;从基础到高级应用 上一文中笔者重点介绍了TextBox控件的详细用法&#xff0c;忘记的 请点击WinForm真入门(8)——TextBox控件详解&#xff0c;那么本文中的RichTextBox与TextBox有什么区别吗&#xff0c;光看名字的话&#xff0c;多了…...

Linux : 内核中的信号捕捉

目录 一 前言 二 信号捕捉的方法 1.sigaction()​编辑 2. sigaction() 使用 三 可重入函数 四 volatile 关键字 一 前言 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。在Linux: 进程信号初识-CSDN博客 这一篇中已经学习到了一种信号…...

Linux 字符串截取#与%

在Linux的Shell脚本中&#xff0c;#和%用于字符串截取&#xff0c;通过通配符模式匹配删除部分内容 批量修改文件名技巧&#xff1a;Linux下#、##、%、%%符号操作详解-CSDN博客 从左截取&#xff08;# 和 ##&#xff09; #&#xff1a;删除最短匹配左侧内容。 ##&#xff1a…...

Android学习总结之自定义View实战篇

场景一&#xff1a;自定义进度条 在很多应用中&#xff0c;我们会看到一些独特样式的进度条&#xff0c;接下来就实现一个简单的圆形进度条。 实现思路 继承 View 类。重写 onDraw 方法&#xff0c;在该方法里使用 Canvas 和 Paint 来绘制圆形进度条。提供更新进度的方法。 …...

C++ STL 详解 ——list 的深度解析与实践指南

在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;list作为一种重要的序列式容器&#xff0c;以其独特的双向链表结构和丰富的操作功能&#xff0c;在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法&#xff0c;能帮助开发者编写出更高效、灵活的代码…...

open函数的概念和使用案例

open 是 Linux/Unix 系统中用于打开或创建文件的系统调用&#xff0c;返回一个文件描述符&#xff08;File Descriptor&#xff09;&#xff0c;后续可通过该描述符进行文件读写等操作。以下是其核心概念和使用案例的详细说明&#xff1a; 1. 核心概念 作用&#xff1a;打开或…...

整理一些大模型部署相关的知识

不一定有什么用, 不经常用还会忘掉. 之前被人问到一次,脑子卡壳回答不出要点, 非常尴尬! 在此记录一下使用心得, 偶尔回来翻看! 一 并行方式 1.1 数据并行 (Data Parallelism) 主要用于模型训练阶段, 即将多个完整的模型副本分布到多个gpu上, 每个gpu运行一部分数据数据, 每个…...