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

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令


Author: Once Day Date: 2025年1月23日

一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…

漫漫长路,有人对你微笑过嘛…

全系列文章请查看专栏: Linux实践记录_Once-Day的博客-CSDN博客

参考文章:

  • ar(1) - Linux manual page
  • 【Linux】ar命令:用于创建、修改和提取静态库(archive)-CSDN博客
  • Linux命令学习手册-ar - 知乎
  • Linux ar命令介绍 和常用示例 - Link_Z - 博客园

文章目录

  • GCC之(8)AR二进制打包命令
        • 1. AR概述
          • 1.1 介绍
          • 1.2 档案(archive)
        • 2. 命令参数介绍
          • 2.1 ar操作指令
          • 2.2 ar通用命令修饰符
          • 2.3 plugin选项
        • 3. 使用技巧
          • 3.1 makefile打包二进制文件
          • 3.2 重新组合二进制文件

1. AR概述
1.1 介绍

GCC中的AR命令全称是Archive,是一个用于创建、修改和提取档案(archive)文件的工具。档案文件通常用于将多个目标文件打包成一个文件,以便于管理和分发。AR命令在Linux/Unix系统的开发和构建过程中经常使用。

以下是AR命令的一些常见用法:

(1)创建档案文件

ar rc libmylib.a file1.o file2.o file3.o

上述命令会创建一个名为libmylib.a的档案文件,并将file1.ofile2.ofile3.o三个目标文件打包进去。

(2)查看档案文件内容

ar t libmylib.a

该命令会列出libmylib.a档案文件中包含的所有目标文件。

(3)向档案文件中添加目标文件

ar r libmylib.a file4.o

该命令会将file4.o目标文件添加到libmylib.a档案文件中。如果档案文件不存在,则会创建一个新的档案文件。

(4)从档案文件中提取目标文件

ar x libmylib.a file2.o

该命令会从libmylib.a档案文件中提取出file2.o目标文件。

(5)删除档案文件中的目标文件

ar d libmylib.a file3.o

该命令会从libmylib.a档案文件中删除file3.o目标文件。

AR命令还有其他一些选项和用法,可以通过man ar命令查看完整的文档。

在使用GCC进行编译和链接时,AR命令通常用于创建静态库。静态库是一种将目标文件打包成单个文件的方式,在链接阶段会被链接到最终的可执行文件中。通过使用AR命令创建静态库,可以方便地管理和重用代码,提高开发效率。

1.2 档案(archive)

档案(archive)是一个包含多个文件的单个文件,其结构使得可以检索原始的单个文件(称为档案的成员)。

ar可以保留原始文件的内容、模式(权限)、时间戳、所有者和组,并在提取时恢复。GNU ar支持成员名称任意长度,但可能会根据系统配置对成员名称长度施加限制,以兼容其他工具维护的档案格式。通常限制为15个字符(与a.out相关的格式)或16个字符(与coff相关的格式)。

ar被视为二进制实用程序,因为这种档案通常用作包含常用子程序的库。由于库通常依赖于其他库,ar还可以在指定--record-libdeps选项时记录库的依赖关系。

当指定修饰符s时,ar会为档案中的可重定位目标模块创建符号索引。创建后,每当ar对档案内容进行更改时(除了q更新操作),都会更新该索引。具有此索引的档案可加速链接到库的过程,并允许库中的例程相互调用,而无需考虑它们在档案中的位置。

可以使用nm -snm --print-armap列出该索引表。如果档案缺少该表,可以使用另一种形式的ar(称为ranlib)仅添加该表。

GNU ar可以选择创建薄档案(thin archive),其中包含符号索引和对档案成员文件原始副本的引用。这对于在本地构建树中构建库很有用,在那里可重定位对象预期保持可用,而复制每个对象的内容只会浪费时间和空间。

档案可以是薄的,也可以是普通的,但不能同时是两者。一旦创建了档案,如果不先删除它并在其位置创建新档案,就无法更改其格式。

薄档案也是扁平的,因此将一个薄档案添加到另一个薄档案中不会嵌套它,而普通档案则会发生这种情况。相反,第一个档案的元素被单独添加到第二个档案中。

档案元素的路径相对于档案本身进行存储。

可重定位目标模块是指包含机器码、数据和重定位信息的目标文件,通常由编译器或汇编器生成,可以在链接阶段与其他模块合并以创建可执行文件或库。

符号是指在程序中使用的变量、函数或标签的名称。符号索引可以加快链接速度,因为链接器可以快速定位所需的符号,而无需搜索整个档案。

2. 命令参数介绍

AR的命令帮助信息如下:

ubuntu->~:$ ar --help
Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...ar -M [<mri-script]commands:d            - delete file(s) from the archivem[ab]        - move file(s) in the archivep            - print file(s) found in the archiveq[f]         - quick append file(s) to the archiver[ab][f][u]  - replace existing or insert new file(s) into the archives            - act as ranlibt[O][v]      - display contents of the archivex[o]         - extract file(s) from the archivecommand specific modifiers:[a]          - put file(s) after [member-name][b]          - put file(s) before [member-name] (same as [i])[D]          - use zero for timestamps and uids/gids (default)[U]          - use actual timestamps and uids/gids[N]          - use instance [count] of name[f]          - truncate inserted file names[P]          - use full path names when matching[o]          - preserve original dates[O]          - display offsets of files in the archive[u]          - only replace files that are newer than current archive contentsgeneric modifiers:[c]          - do not warn if the library had to be created[s]          - create an archive index (cf. ranlib)[l <text> ]  - specify the dependencies of this library[S]          - do not build a symbol table[T]          - deprecated, use --thin instead[v]          - be verbose[V]          - display the version number@<file>      - read options from <file>--target=BFDNAME - specify the target object format as BFDNAME--output=DIRNAME - specify the output directory for extraction operations--record-libdeps=<text> - specify the dependencies of this library--thin       - make a thin archiveoptional:--plugin <p> - load the specified plugin
2.1 ar操作指令

下面是AR的常用操作指令说明:

(1)删除(d),从归档文件中删除指定的文件。

ar d libtest.a file1.o file2.o

该命令将从libtest.a归档文件中删除file1.o和file2.o文件。

(2)移动(m[ab]),在归档文件中移动文件的位置。

ar mab libtest.a file1.o file2.o

该命令将file1.o和file2.o文件移动到归档文件的末尾(b选项)或者开头(a选项)。

(3)打印§,打印归档文件中指定文件的内容。

ar p libtest.a file1.o

该命令将显示libtest.a归档文件中file1.o文件的内容。

(4)快速追加(q[f]),将文件快速追加到归档文件的末尾。

ar q libtest.a file3.o file4.o

该命令将file3.o和file4.o文件追加到libtest.a归档文件的末尾。如果使用f选项,则即使归档文件不存在也会创建它。

(5)替换或插入(r[ab][f][u]),替换归档文件中已有的文件,或插入新文件。

ar r libtest.a file1.o file5.o

该命令将用file5.o替换libtest.a归档文件中的file1.o,如果file5.o不存在,则将其插入到归档文件中。选项a和b分别表示将文件插入到归档的开头或末尾,f选项表示即使归档文件不存在也会创建它,u选项表示只有当文件比归档中的同名文件更新时才替换。

(6)符号表(s),类似于ranlib命令,用于创建或更新归档文件的符号表。

ar s libtest.a

该命令将创建或更新libtest.a归档文件的符号表,加速对归档文件中符号的访问。

(7)内容列表(t[O][v]),显示归档文件的内容列表。

ar tv libtest.a

该命令将显示libtest.a归档文件中的文件列表。v选项提供详细输出,O选项按照归档文件中的顺序显示文件列表。

(8)提取(x[o]),从归档文件中提取指定的文件。

ar x libtest.a file1.o file2.o

该命令将从libtest.a归档文件中提取file1.o和file2.o文件。o选项表示提取文件时保留原始的日期。

2.2 ar通用命令修饰符

下面是AR的通用命令修饰符介绍:

(1)不警告([c]),在创建归档文件时,如果归档文件不存在,AR不会显示警告信息。这在脚本或自动化流程中很有用,可以避免不必要的警告输出。

ar cr libtest.a file1.o file2.o

(2)符号表索引([s]),在创建归档文件时,AR会同时创建归档文件的符号表索引,类似于ranlib命令的功能。这样可以加速对归档文件中符号的访问,特别是在大型项目中使用归档文件作为库时非常有用。

ar rs libtest.a file1.o file2.o

(3)依赖关系([l]),指定当前库文件的依赖关系。这个选项可以在归档文件中记录其所依赖的其他库文件,方便管理复杂的库依赖关系。

ar rl "libdep1.a libdep2.a" libtest.a file1.o file2.o

(4)不生成符号表([S]),在创建归档文件时,AR不会生成符号表。这可以减小归档文件的大小,但会影响对归档文件中符号的访问效率。

ar rS libtest.a file1.o file2.o

(5)详细输出([v]),在执行操作时,AR会显示详细的信息,包括正在处理的文件名、操作结果等。这对于调试和理解AR的行为非常有帮助。

ar rvx libtest.a file1.o file2.o

(6)版本号([V]),显示AR的版本号。这个选项可以用于检查当前系统中AR的版本,以确保兼容性。

ar V

(7)读取选项文件(@),从指定的文件中读取AR命令选项。这个功能可以将一组常用的AR选项存储在文件中,然后通过@选项来引用,从而简化AR命令的编写。

ar @options.txt

(8)目标文件格式(--target=BFDNAME),指定目标对象文件格式为BFDNAME。这个选项可以让AR适应不同的目标平台和文件格式,提高其灵活性和可移植性。

ar --target=elf64-x86-64 r libtest.a file1.o file2.o

(9)提取输出目录(--output=DIRNAME),指定提取操作的输出目录。这个选项可以将提取的文件放置在指定的目录中,而不是当前工作目录,方便管理提取出的文件。

ar --output=extracted_files x libtest.a

(10)记录依赖关系(--record-libdeps=),指定当前库文件的依赖关系,与[l]选项类似。这个选项提供了另一种记录库依赖关系的方式,可以根据个人喜好选择使用。

ar --record-libdeps="libdep1.a libdep2.a" r libtest.a file1.o file2.o

(11)瘦归档文件(–thin),创建瘦归档文件,即只存储文件的路径而不存储文件内容。这种归档文件可以大大减小归档文件的大小,特别适用于存储大量小文件的场景。但是,使用瘦归档文件时,需要确保原始文件在提取时可用。

ar --thin r libtest.a file1.o file2.o
2.3 plugin选项

AR的--plugin选项允许AR加载额外的插件,以支持更多的文件格式,包括包含链接时优化(Link-Time Optimization, LTO)信息的目标文件。这个功能可以显著扩展AR的应用范围和灵活性,特别是在使用LTO等高级编译优化技术时。

使用--plugin选项的基本语法如下:

 ar --plugin name [other options] [member...]

其中,name是要加载的插件名称。例如,要加载名为liblto_plugin.so的插件,可以使用以下命令:

 ar --plugin liblto_plugin.so r libtest.a file1.o file2.o

需要注意的是,--plugin选项只在工具链启用了插件支持时可用。如果在构建工具链时没有启用插件支持,则无法使用该选项。

如果没有通过--plugin选项指定要加载的插件,但工具链启用了插件支持,那么AR会自动搜索${libdir}/bfd-plugins目录下的插件文件。AR会按照字母顺序遍历该目录下的文件,并使用第一个声明支持当前目标文件的插件。这种机制可以简化插件的管理和使用,无需每次都显式指定插件名称。

例如,假设${libdir}/bfd-plugins目录下有以下插件文件:

  • liblto_plugin.so.0.0.0
  • my_custom_plugin.so
  • other_plugin.so

当使用AR操作包含LTO信息的目标文件时,如果没有通过--plugin选项指定插件名称,AR会自动选择liblto_plugin.so.0.0.0插件,因为它在字母顺序上优先于其他插件。

需要特别注意的是,AR的--plugin选项使用的插件搜索目录与ld的-plugin选项不同。为了让AR使用ld的插件,需要将插件文件复制到${libdir}/bfd-plugins目录下。对于基于GCC的编译,ld的插件文件通常名为liblto_plugin.so.0.0.0,而基于Clang的编译则使用LLVMgold.so。GCC插件通常向后兼容早期版本,因此只需复制最新版本的插件文件即可。

3. 使用技巧
3.1 makefile打包二进制文件

在Makefile编译流程中,AR工具通常用于创建和管理静态库文件(.a文件)。静态库是一组目标文件(.o文件)的集合,可以在链接阶段被其他目标文件或可执行文件引用。通过将常用的函数、类等代码编译为静态库,可以提高代码的重用性、模块化和可维护性。

在Makefile中,AR工具的作用主要体现在以下两个方面:

  1. 创建静态库:将一组.o文件打包成一个.a静态库文件。
  2. 更新静态库:向已有的.a静态库文件中添加、删除或替换.o文件。

以下是在Makefile中使用AR工具的典型实现形式:

# 定义静态库的名称
LIBRARY = libmylib.a# 定义静态库所包含的目标文件
OBJECTS = file1.o file2.o file3.o# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -c# 定义AR工具和操作选项
AR = ar
ARFLAGS = rcs# 默认的目标:创建静态库
all: $(LIBRARY)# 创建静态库的规则
$(LIBRARY): $(OBJECTS)$(AR) $(ARFLAGS) $@ $^# 编译目标文件的规则
%.o: %.c$(CC) $(CFLAGS) $< -o $@# 清理生成的文件
clean:rm -f $(OBJECTS) $(LIBRARY)

在上面的Makefile示例中:

  • LIBRARY变量定义了要创建的静态库的名称,这里是libmylib.a
  • OBJECTS变量定义了静态库所包含的目标文件,这里是file1.ofile2.ofile3.o
  • CCCFLAGS变量定义了编译器和编译选项,用于编译源代码文件生成目标文件。
  • ARARFLAGS变量定义了AR工具和操作选项。ARFLAGS中的r表示替换或添加目标文件,c表示在必要时创建静态库,s表示创建目标文件索引以加快访问速度。
  • all目标是默认目标,依赖于$(LIBRARY),表示创建静态库。
  • $(LIBRARY)目标的规则描述了如何从目标文件$(OBJECTS)创建静态库。$@表示目标名称,即$(LIBRARY)$^表示所有的依赖文件,即$(OBJECTS)
  • %.o: %.c是一个隐含规则,描述了如何从.c源文件编译生成.o目标文件。
  • clean目标用于清理生成的中间文件和静态库文件。

当在命令行中执行make命令时,Makefile中的规则将被依次执行,最终生成静态库文件libmylib.a

3.2 重新组合二进制文件

在某些情况下,我们可能需要从现有的静态库中提取出特定的目标文件(.o文件),并将其与其他源代码文件一起重新编译,以生成新的二进制文件。这种技术可以用于重用现有的代码库、修复特定模块中的错误、或者创建定制的库和可执行文件。以下是使用AR提取静态库中的.o文件,并与其他源代码混合编译新的二进制文件的详细步骤:

(1)使用AR的x操作提取静态库中的.o文件

ar x libtest.a file1.o file2.o

该命令将从libtest.a静态库中提取出file1.ofile2.o两个目标文件。执行后,当前目录下会出现file1.ofile2.o文件。

(2)准备其他需要参与编译的源代码文件,例如file3.cfile4.c

(3)使用编译器(如gcc)将提取出的.o文件和其他源代码文件一起编译,生成新的二进制文件:

gcc -o newbinary file1.o file2.o file3.c file4.c

该命令将file1.ofile2.ofile3.cfile4.c一起编译,生成名为newbinary的新二进制文件。







Alt

Once Day

也信美人终作土,不堪幽梦太匆匆......

如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!

(。◕‿◕。)感谢您的阅读与支持~~~

相关文章:

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

自定义命令执行器:C++中命令封装的深度探索(C/C++实现)

在现代软件开发中&#xff0c;执行系统命令是一项常见的需求&#xff0c;无论是自动化脚本、系统管理工具&#xff0c;还是需要调用外部程序的复杂应用程序&#xff0c;都离不开对系统命令的调用。然而&#xff0c;直接使用系统调用&#xff08;如 execve&#xff09;虽然简单&…...

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)

Android BitmapShader简洁实现马赛克/高斯模糊&#xff08;毛玻璃&#xff09;&#xff0c;Kotlin&#xff08;三&#xff09; 发现&#xff0c;如果把&#xff08;二&#xff09; Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;二&#xff09;-CSDN博客 …...

7.渲染管线——几何阶段的概述

几何阶段是渲染管线中的一个重要部分&#xff0c;主要负责处理3D模型的几何信息&#xff08;比如顶点位置、形状、大小等&#xff09;&#xff0c;并将它们转换为屏幕上的2D图像。用通俗易懂的方式来解释&#xff1a; 通俗解释&#xff1a;几何阶段就像把3D模型“拍扁”成2D照片…...

微信小程序实现自定义日历功能

文章目录 1. 创建日历组件实现步骤&#xff1a;2. 代码实现过程3. 实现效果图4. 关于作者其它项目视频教程介绍 1. 创建日历组件实现步骤&#xff1a; 创建日历组件&#xff1a;首先&#xff0c;你需要创建一个日历组件&#xff0c;包含显示日期的逻辑。样式设计&#xff1a;为…...

Vue3 + TS 实现批量拖拽 文件夹和文件 组件封装

一、html 代码&#xff1a; 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性&#xff0c;可根据自己需求&#xff0c;在组件外部做调整 <template><div class"dragUpload"><el-dial…...

私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例

摘要&#xff1a;随着互联网技术的快速发展&#xff0c;流量已成为企业竞争的关键资源。私域流量池&#xff0c;作为提升用户转化率和增强用户粘性的有效手段&#xff0c;正逐渐受到企业的广泛关注。本文旨在深入探讨私域流量池构建的目的、优势及其在实际应用中的策略&#xf…...

NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划

引言&#xff1a;NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品&#xff0c; 浓缩每周 NFT 新闻&#xff0c;为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟…...

Keepalived实现HAProxy高可用搭建

Keepalived实现HAProxy高可用 文章目录 Keepalived实现HAProxy高可用拓扑表格如下拓扑结构&#xff08;示例&#xff09;nginx安装&#xff08;所有server&#xff09;HAProxy安装&#xff08;主备机相同&#xff09;HAProxy配置&#xff08;主备机相同&#xff09; 注释如下内…...

HashTable, HashMap, ConcurrentHashMap 之间的区别

一、HashTable 只是将关键方法加上了锁&#xff08;synchronized关键字&#xff09;。 缺点&#xff1a;1.如果多线程访问同一个HashTable就回直接造成锁冲突。 2.HashTable的size属性也是通过 synchronized来控制同步的&#xff0c;效率比较低。 3.在扩容时会涉及大量的拷贝…...

如何确保Spring单例Bean在高并发环境下的安全性?

在Spring中&#xff0c;单例Bean就像是一个“公共的水杯”&#xff0c;整个应用程序中的所有线程都会共享这一个实例。在大部分情况下&#xff0c;这没什么问题&#xff0c;但如果多个线程同时想要修改这个“水杯”里的内容&#xff0c;就可能会出现问题了。 想象一下&#xff…...

【2024年华为OD机试】 (A卷,200分)- 工单调度策略(JavaScriptJava PythonC/C++)

一、问题描述 问题描述 华为工单调度系统需要根据不同的策略调度外线工程师(FME)修复工单。每个工单有一个修复时间要求(SLA时间),在SLA时间内完成修复的工单可以获得对应的积分,超过SLA时间完成的工单不获得积分,但必须完成该工单。目标是设计一种调度策略,使得外线…...

Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口

在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...

Alibaba Spring Cloud 六 Seata 的核心组件:RM

在 Alibaba Spring Cloud Seata 中&#xff0c;Resource Manager (RM) 是三大核心组件之一。它主要负责管理分支事务中的资源&#xff08;如数据库、文件等&#xff09;&#xff0c;并与 Transaction Coordinator (TC) 协作完成分支事务的注册、提交和回滚。RM 是分布式事务实际…...

【Linux】列出所有连接的 WiFi 网络的密码

【Linux】列出所有连接的 WiFi 网络的密码 终端输入 sudo grep psk /etc/NetworkManager/system-connections/*会列出所有连接过 Wifi 的信息&#xff0c;格式类似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID&#xff0c;BBBBB 是对…...

snippets router pinia axios mock

文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充&#xff1a;https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…...

C#常考随笔2:函数中多次使用string的+=处理,为什么会产生大量内存垃圾(垃圾碎片),有什么好的方法可以解决?

在 C# 中&#xff0c;由于string类型是不可变的&#xff0c;当在函数中多次使用操作符来拼接字符串时&#xff0c;每次操作都会创建一个新的string对象&#xff0c;旧的对象则成为垃圾对象&#xff0c;这会导致大量的内存分配和垃圾回收&#xff0c;产生内存垃圾和碎片。 在需…...

GitLab配置免密登录和常用命令

SSH 免密登录 Windows免密登录 删除现有Key 访问目录&#xff1a;C:\Users\Administrator\ .ssh&#xff0c;删除公钥&#xff1a;id_rsa.pub &#xff0c;私钥&#xff1a;id_rsa 2.生成.ssh 秘钥 运行命令生成.ssh 秘钥目录&#xff08; ssh-keygen -t rsa -C xxxxxx126.…...

编码器和扩散模型

目录 摘要abstract1.自动编码器2.变分编码器&#xff08;VAE&#xff09;3.论文阅读3.1 介绍3.2 方法3.3 结论 4.总结参考文献 摘要 本周学习了自动编码器&#xff08;AE&#xff09;和变分自动编码器&#xff08;VAE&#xff09;的基本原理与实现&#xff0c;分析其在数据降维…...

three.js用粒子使用canvas生成的中文字符位图材质

three.js用粒子使用canvas生成中文字符材质 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Three.…...

数据结构与算法之堆: LeetCode 208. 实现 Trie (前缀树) (Ts版)

实现 Trie (前缀树) https://leetcode.cn/problems/implement-trie-prefix-tree/description/ 描述 Trie&#xff08;发音类似 “try”&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&am…...

在 Linux 中使用 nslookup命令

什么是 nslookup? nslookup 命令是名称服务器查找的缩写&#xff0c;是一种网络管理工具&#xff0c;用于获取域名的 IP 地址或其他 DNS 记录信息&#xff0c;通常用于解决 DNS 或名称解析问题 nslookup一般语法&#xff0c;<domain-name>是您要查询的域名&#xff0c…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.1 从零搭建NumPy环境:安装指南与初体验

1. 从零搭建NumPy环境&#xff1a;安装指南与初体验 NumPy核心能力图解&#xff08;架构图&#xff09; NumPy 是 Python 中用于科学计算的核心库&#xff0c;它提供了高效的多维数组对象以及用于处理这些数组的各种操作。NumPy 的核心能力可以概括为以下几个方面&#xff1a…...

PHP校园助手系统小程序

&#x1f511; 校园助手系统 —— 智慧校园生活 &#x1f4f1;一款基于ThinkPHPUniapp框架深度定制的校园助手系统&#xff0c;犹如一把智慧之钥&#xff0c;专为校园团队精心打造&#xff0c;解锁智慧校园生活的无限精彩。它独家适配微信小程序&#xff0c;无需繁琐的下载与安…...

2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计

一、高并发内存池框架设计 高并发池框架设计&#xff0c;特别是针对内存池的设计&#xff0c;需要充分考虑多线程环境下&#xff1a; 性能问题锁竞争问题内存碎片问题 高并发内存池的整体框架设计旨在提高内存的申请和释放效率&#xff0c;减少锁竞争和内存碎片。 高并发内存…...

在线可编辑Excel

1. Handsontable 特点&#xff1a; 提供了类似 Excel 的表格编辑体验&#xff0c;包括单元格样式、公式计算、数据验证等功能。 支持多种插件&#xff0c;如筛选、排序、合并单元格等。 轻量级且易于集成到现有项目中。 具备强大的自定义能力&#xff0c;可以调整外观和行为…...

物业管理系统源码优化物业运营模式实现服务智能化与品质飞跃

内容概要 在当今快速发展且竞争激烈的市场环境中&#xff0c;物业管理面临着众多挑战&#xff0c;而“物业管理系统源码”的优化&#xff0c;无疑为解决这些问题提供了有效的途径。这些优化不仅提升了物业管理的效率&#xff0c;还实现了服务智能化&#xff0c;推动了物业运营…...

双足机器人开源项目

双足机器人&#xff08;也称为人形机器人或仿人机器人&#xff09;是一个复杂的领域&#xff0c;涉及机械设计、电子工程、控制理论、计算机视觉等多个学科。对于想要探索或开发双足机器人的开发者来说&#xff0c;有许多开源项目可以提供帮助。这些项目通常包括硬件设计文件、…...

第五部分:Linux中的gcc/g++以及gdb和makefile

目录 1、编译器gcc和g 1.1、预处理&#xff08;进行宏替换) 1.2、编译&#xff08;生成汇编) 1.3、汇编&#xff08;生成机器可识别代码&#xff09; 1.4、连接&#xff08;生成可执行文件或库文件&#xff09; 1.5、gcc编译器的使用 2、Linux调试器-gdb使用 2.1、debug…...

decison tree 决策树

熵 信息增益 信息增益描述的是在分叉过程中获得的熵减&#xff0c;信息增益即熵减。 熵减可以用来决定什么时候停止分叉&#xff0c;当熵减很小的时候你只是在不必要的增加树的深度&#xff0c;并且冒着过拟合的风险 决策树训练(构建)过程 离散值特征处理&#xff1a;One-Hot…...

GPU算力平台|在GPU算力平台部署AI虚拟换衣模型(CatVTON)的应用实战教程

文章目录 一、GPU算力服务平台概述智能资源分配优化的Kubernetes架构按需计费安全保障平台特色功能 二、平台账号注册流程AI虚拟换衣模型(CatVTON)的应用实战教程AI虚拟换衣模型(CatVTON)的介绍AI虚拟换衣模型(CatVTON)的部署步骤 一、GPU算力服务平台概述 蓝耘GPU算力平台专为…...

使用云服务器自建Zotero同步的WebDAV服务教程

Zotero 是一款广受欢迎的文献管理软件&#xff0c;其同步功能可以通过 WebDAV 实现文献附件的同步。相比 Zotero 官方提供的300MB免费存储服务&#xff0c;自建 WebDAV 服务具有存储空间大、成本低以及完全控制数据的优势。本文将详细介绍如何使用云服务器自建 WebDAV 服务&…...

单片机基础模块学习——按键

一、按键原理图 当把跳线帽J5放在右侧&#xff0c;属于独立按键模式&#xff08;BTN模式&#xff09;&#xff0c;放在左侧为矩阵键盘模式&#xff08;KBD模式&#xff09; 整体结构是一端接地&#xff0c;一端接控制引脚 之前提到的都是使用了GPIO-准双向口的输出功能&#x…...

FlinkSql使用中rank/dense_rank函数报错空指针

问题描述 在flink1.16(甚至以前的版本)中&#xff0c;使用rank()或者dense_rank()进行排序时&#xff0c;某些场景会导致报错空指针NPE(NullPointerError) 报错内容如下 该报错没有行号/错误位置&#xff0c;无法排查 现状 目前已经确认为bug&#xff0c;根据github上的PR日…...

WPF基础 | WPF 基础概念全解析:布局、控件与事件

WPF基础 | WPF 基础概念全解析&#xff1a;布局、控件与事件 一、前言二、WPF 布局系统2.1 布局的重要性与基本原理2.2 常见布局面板2.3 布局的测量与排列过程 三、WPF 控件3.1 控件概述与分类3.2 常见控件的属性、方法与事件3.3 自定义控件 四、WPF 事件4.1 路由事件概述4.2 事…...

【AIGC学习笔记】扣子平台——精选有趣应用,探索无限可能

背景介绍&#xff1a; 由于近期业务发展的需求&#xff0c;我开始接触并深入了解了扣子平台的相关知识&#xff0c;并且通过官方教程自学了简易PE工作流搭建的技巧。恰逢周会需要准备与工作相关的分享主题&#xff0c;而我作为一个扣子平台的初学者&#xff0c;也想探索一下这…...

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…...

csapp2.4节——浮点数

目录 二进制小数 十进制小数转二进制小数 IEEE浮点表示 规格化表示 非规格化表示 特殊值 舍入 浮点运算 二进制小数 类比十进制中的小数&#xff0c;可定义出二进制小数 例如1010.0101 小数点后的权重从-1开始递减。 十进制小数转二进制小数 整数部分使用辗转相除…...

Java面试题2025-Spring

讲师&#xff1a;邓澎波 Spring面试专题 1.Spring应该很熟悉吧&#xff1f;来介绍下你的Spring的理解 1.1 Spring的发展历程 先介绍Spring是怎么来的&#xff0c;发展中有哪些核心的节点&#xff0c;当前的最新版本是什么等 通过上图可以比较清晰的看到Spring的各个时间版本对…...

element tbas增加下拉框

使用Tabs 标签页的label插槽&#xff0c;嵌入Dropdown 下拉菜单&#xff0c;实现Tabs 标签页增加下拉切换功能 Tabs 标签页 tab-click"事件"&#xff08;这个事件当中到拥有下拉框的tab里时&#xff0c;可以存一下Dropdown 第一个菜单的id&#xff0c;实现点击到拥有…...

Windows Defender添加排除项无权限的解决方法

目录 起因Windows Defender添加排除项无权限通过管理员终端添加排除项管理员身份运行打开PowerShell添加/移除排除项的命令 起因 博主在打软件补丁时&#xff0c;遇到 Windows Defender 一直拦截并删除文件&#xff0c;而在 Windows Defender 中无权限访问排除项。尝试通过管理…...

Git上传了秘钥如何彻底修改包括历史记录【从安装到实战详细版】

使用 BFG Repo-Cleaner 清除 Git 仓库中的敏感信息 1. 背景介绍 在使用 Git 进行版本控制时&#xff0c;有时会不小心将敏感信息&#xff08;如 API 密钥、密码等&#xff09;提交到仓库中。即使后续删除&#xff0c;这些信息仍然存在于 Git 的历史记录中。本文将介绍如何使用…...

贪心专题----

看了讲解&#xff0c;贪心似乎没有定式的解题方法&#xff0c;更多是按照常识来&#xff1b; 455. 分发饼干 将胃口和饼干尺寸 都排序&#xff1b; 然后遍历胃口&#xff0c;从饼干尺寸的最后一个开始。 这里为什么是遍历胃口&#xff1f; 当胃口大于饼干尺寸&#xff0c;…...

YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…...

LabVIEW项目中的工控机与普通电脑选择

工控机&#xff08;Industrial PC&#xff09;与普通电脑在硬件设计、性能要求、稳定性、环境适应性等方面存在显著差异。了解这些区别对于在LabVIEW项目中选择合适的硬件至关重要。下面将详细分析这两种设备的主要差异&#xff0c;并为LabVIEW项目中的选择提供指导。 ​ 硬件设…...

AI赋能医疗:智慧医疗系统源码与互联网医院APP的核心技术剖析

本篇文章&#xff0c;笔者将深入剖析智慧医疗系统的源码架构以及互联网医院APP背后的核心技术&#xff0c;探讨其在医疗行业中的应用价值。 一、智慧医疗系统的核心架构 智慧医疗系统是一个高度集成的信息化平台&#xff0c;主要涵盖数据采集、智能分析、决策支持、远程医疗等…...

一文详解Filter类源码和应用

背景 在日常开发中&#xff0c;经常会有需要统一对请求做一些处理&#xff0c;常见的比如记录日志、权限安全控制、响应处理等。此时&#xff0c;ServletApi中的Filter类&#xff0c;就可以很方便的实现上述效果。 Filter类 是一个接口&#xff0c;属于 Java Servlet API 的一部…...

Spring Boot - 数据库集成03 - 集成Mybatis

Spring boot集成Mybatis 文章目录 Spring boot集成Mybatis一&#xff1a;基础知识1&#xff1a;什么是MyBatis2&#xff1a;为什么说MyBatis是半自动ORM3&#xff1a;MyBatis栈技术演进3.1&#xff1a;JDBC&#xff0c;自行封装JDBCUtil3.2&#xff1a;IBatis3.3&#xff1a;My…...

力扣算法题——202.快乐数【系统讲解】

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助 “环” 的概念探索规律 从规律到代码实现的转化 快慢指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解…...

求阶乘(信息学奥赛一本通-2019)

【题目描述】 利用for循环求n!的值。 提示&#xff0c;n!12...n。 【输入】 输入一个正整数n。 【输出】 输出n!的值。 【输入样例】 4 【输出样例】 24 【提示】 【数据规模及约定】 对于所有数据&#xff0c;1≤n≤20。 【题解代码】 #include<iostream> using namesp…...