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

【Linux】动静态库

一、库

静态库 .a[Linux]、.lib[windows]

动态库 .so[Linux]、.dll[windows]

二、静态库使用

如果我们要做一个静态库的话,首先我们需要把我们源文件(.c/.cpp)隐藏起来,头文件(.h)必须暴露出来,
1.我们先要把我们所有的.c文件编译成.o文件,因为我们都知道我们正常进行程序翻译的时候,首先要做的工作就是把.c变成.o文件,最后把所有.o都链接起来。

[zxw@hcss-ecs-cc58 lesson20]$ ll
total 24
-rw-rw-r-- 1 zxw zxw 1350 Jan 20 22:14 my_stdio.c
-rw-rw-r-- 1 zxw zxw  408 Jan 20 20:01 my_stdio.h
-rw-rw-r-- 1 zxw zxw 2784 Jan 26 19:42 my_stdio.o
-rw-rw-r-- 1 zxw zxw  156 Jan 26 19:40 my_string.c
-rw-rw-r-- 1 zxw zxw   43 Jan 26 19:40 my_string.h
-rw-rw-r-- 1 zxw zxw 1272 Jan 26 19:42 my_string.o
[zxw@hcss-ecs-cc58 lesson20]$ ar -rc libmystdio.a my_stdio.o my_string.o 

2.把所以.o文件打包

指令:ar -rc(-r是replace,-c是create)

静态库必须有前缀lib,后缀.a。

2.1 安装系统 

这个库制作好了,直接把他安装到系统里面:

把我们头文件拷贝到系统特定路径里,Linux系统里默认搜索头文件路径是/usr/include

[zxw@hcss-ecs-cc58 lesson20]$ sudo cp *.h /usr/include/

然后把我们库也要安装到系统里,默认路径一般是/lib64/

[zxw@hcss-ecs-cc58 lesson20]$ sudo cp libmystdio.a /lib64/

之后我们就可以使用我们的头文件了。

#include<my_stdio.h>
#include<my_string.h>
#include<stdio.h>
int main()
{const char *a = "abcdf";printf("%s: %d\n",a,my_strlen(a));mFILE *fp =mfopen("./log.txt","a");if(fp ==NULL) return 1;mfwrite(a,my_strlen(a),fp);mfwrite(a,my_strlen(a),fp);mfwrite(a,my_strlen(a),fp);mfclose(fp);return 0;
}
[zxw@hcss-ecs-cc58 lesson20]$ gcc main.c -l mystdio
[zxw@hcss-ecs-cc58 lesson20]$ ll
total 52
-rwxrwxr-x 1 zxw zxw 8896 Jan 27 12:39 a.out

在这里我们要在gcc main.c后面添加-l mystdio --->那是因为gcc是编C语言的,他默认要认识C标准库的,我们刚才写的库叫第三方库要让编译器认识所以我们要在后面-l(link) 链接mystdio这个静态库

2.2 在当前路径下进行开发

[zxw@hcss-ecs-cc58 other_people]$ ll
total 20
-rw-rw-r-- 1 zxw zxw 4310 Jan 27 13:05 libmystdio.a
-rw-rw-r-- 1 zxw zxw  339 Jan 27 13:05 main.c
-rw-rw-r-- 1 zxw zxw  408 Jan 27 13:05 my_stdio.h
-rw-rw-r-- 1 zxw zxw   43 Jan 27 13:05 my_string.h
[zxw@hcss-ecs-cc58 other_people]$ gcc main.c -o main -L. -lmystdio
[zxw@hcss-ecs-cc58 other_people]$ ll
total 32
-rw-rw-r-- 1 zxw zxw 4310 Jan 27 13:05 libmystdio.a
-rwxrwxr-x 1 zxw zxw 8896 Jan 27 13:15 main
-rw-rw-r-- 1 zxw zxw  342 Jan 27 13:06 main.c
-rw-rw-r-- 1 zxw zxw  408 Jan 27 13:05 my_stdio.h
-rw-rw-r-- 1 zxw zxw   43 Jan 27 13:05 my_string.h

指令:gcc main.c -o main -L. -lmystdio 

-L.:-L选项用于指定库文件的搜索路径。这里的.表示当前目录,即告诉编译器在当前目录下搜索库文件。

2.3 带路径的库

Makefile ----> 先发布库

libmystdio.a:my_stdio.o my_string.oar -rc $@ $^
%.o:%.cgcc -c $<
.PHONY:clean
clean:rm -rf *.a *.o stdc.*
.PHONY:output
output:mkdir -p stdc/includemkdir -p stdc/libcp -f *.h stdc/includecp -f *.o stdc/libtar -czf stdc.tgz stdc

使用带路径的库 

[zxw@hcss-ecs-cc58 lesson20]$ ll
total 12
-rw-rw-r-- 1 zxw zxw  339 Jan 27 12:21 main.c
drwxrwxr-x 3 zxw zxw 4096 Jan 27 14:09 other_people
-rw-rw-r-- 1 zxw zxw 1696 Jan 27 14:11 stdc.tgz
[zxw@hcss-ecs-cc58 lesson20]$ tar xzf stdc.tgz 
[zxw@hcss-ecs-cc58 lesson20]$ ll
total 16
-rw-rw-r-- 1 zxw zxw  339 Jan 27 12:21 main.c
drwxrwxr-x 3 zxw zxw 4096 Jan 27 14:09 other_people
drwxrwxr-x 4 zxw zxw 4096 Jan 27 13:48 stdc
-rw-rw-r-- 1 zxw zxw 1696 Jan 27 14:11 stdc.tgz
[zxw@hcss-ecs-cc58 lesson20]$ gcc main.c -I stdc/include/ -L stdc/lib/ -l mystdio

 -I(大写的 i)选项用于指定头文件的搜索路径。这里告诉编译器在stdc/include目录下搜索main.c中#include指令所包含的头文件。

三、动态库使用

3.1 安装到系统

Makefile 

libmystdio.so:my_stdio.o my_string.ogcc -o $@ $^ -shared
%.o:%.cgcc -fPIC -c $<
.PHONY:clean
clean:rm -rf *.a *.so *.o 
[zxw@hcss-ecs-cc58 other_people]$ make
gcc -fPIC -c my_stdio.c
gcc -fPIC -c my_string.c
gcc -o libmystdio.so my_stdio.o my_string.o -shared

shared:表示⽣成共享库格式
fPIC:产⽣位置⽆关码(position independent code) 

先拷贝到系统中,拷贝.h和拷贝到地址静态库中.h的位置一样,拷贝.so和拷贝和拷贝到地址静态库中.o的位置一样 

[zxw@hcss-ecs-cc58 other_people]$ gcc main.c -l mystdio
[zxw@hcss-ecs-cc58 other_people]$ ll
total 36
-rwxrwxr-x 1 zxw zxw 8520 Jan 27 14:38 a.out
[zxw@hcss-ecs-cc58 other_people]$ ./a.out 
abcdf: 5
[zxw@hcss-ecs-cc58 other_people]$ ldd a.out linux-vdso.so.1 =>  (0x00007fff17feb000)libmystdio.so => /lib64/libmystdio.so (0x00007f41fc1bc000)libc.so.6 => /lib64/libc.so.6 (0x00007f41fbdee000)/lib64/ld-linux-x86-64.so.2 (0x00007f41fc3be000)

我们在ldd a.out这个文件时,可以看清 libmystdio.so => /lib64/libmystdio.so(0x00007f41fc1bc000)

可以看到库的名称和库的完整路径以及库的地址

 当我们把库的删除掉还有头文件。

[zxw@hcss-ecs-cc58 other_people]$ ./a.out 
./a.out: error while loading shared libraries: libmystdio.so: cannot open shared object file: No such file or directory
[zxw@hcss-ecs-cc58 other_people]$ ldd a.out linux-vdso.so.1 =>  (0x00007ffc86fbd000)libmystdio.so => not foundlibc.so.6 => /lib64/libc.so.6 (0x00007f94ec189000)/lib64/ld-linux-x86-64.so.2 (0x00007f94ec557000)

结果就是我们执行不了文件与静态库的不一样。 

3.2 在当前路径下进行开发

动态库在当前路径进行开发与静态库在当前路径进行开发执行的指令一样。

3.3 带路径的库

[zxw@hcss-ecs-cc58 other_people]$ ll
-rw-rw-r-- 1 zxw zxw  339 Jan 27 19:23 main.c
drwxrwxr-x 4 zxw zxw 4096 Jan 27 19:23 stdc//用静态链接的方式
[zxw@hcss-ecs-cc58 other_people]$ gcc main.c -o main -I stdc/include/ -L stdc/lib/ -l mystdio//运行之后静态库的方法发生了变化
[zxw@hcss-ecs-cc58 other_people]$ ./main 
./main: error while loading shared libraries: libmystdio.so: cannot open shared object file: No such file or directory[zxw@hcss-ecs-cc58 other_people]$ ldd mainlinux-vdso.so.1 =>  (0x00007fff5fb4e000)libmystdio.so => not foundlibc.so.6 => /lib64/libc.so.6 (0x00007f3b8de67000)/lib64/ld-linux-x86-64.so.2 (0x00007f3b8e235000)

接下来要给系统指定路径,查找自己的动态库-->方法

1.拷贝.so到系统默认路径下,比如/lib64 

2. 在系统共享库路径下,建立同名软连接

3.Linux系统中,把路径添加到系统当中,LD_LIBRARY_PATH

LD_LIBRARY_PATH=$LD_LIBRART_PATH:/home/zxw/linux/112/lesson20/other_people/stdc/lib/

 4

[zxw@hcss-ecs-cc58 other_people]$ sudo touch /etc/ld.so.conf.d/112.conf[zxw@hcss-ecs-cc58 other_people]$ ll /etc/ld.so.conf.d/
total 16
-rw-r--r--  1 root root  0 Jan 27 20:13 112.conf[zxw@hcss-ecs-cc58 lib]$ sudo vim /etc/ld.so.conf.d/112.conf

 112.conf

/home/zxw/linux/112/lesson20/other_people/stdc/lib

指令执行: 

 sudo ldconfig

四、可执行程序(ELF)格式

[zxw@hcss-ecs-cc58 lesson20]$ size a.out text	   data	    bss	    dec	    hex	filename2709	    596	      4	   3309	    ced	a.out

最常见的节:
• 代码节(.text):用于保存机器指令,是程序的主要执行部分。
• 数据节(.data):保存已初始化的全局变量和局部静态变量。

可执行程序和动态库以及汇编形成的.o文件都是ELF格式。

所谓的链接就是将我们一个个的相同属性的section进行合并。

Program Header

Section header table 

https://blog.csdn.net/daide2012/article/details/73065204?fromshare=blogdetail&sharetype=blogdetail&sharerId=73065204&sharerefer=PC&sharesource=m0_73911405&sharefrom=from_linkELF HEADER主要⽬的是定位⽂件的其他部分。

Section Header Table在链接时起作用,Program Header Table⼀个在运⾏加载时起作用,我们看内部信息也能看出Program Header Table又有偏移量又有虚拟地址。

    相关文章:

    【Linux】动静态库

    一、库 静态库 .a[Linux]、.lib[windows] 动态库 .so[Linux]、.dll[windows] 二、静态库使用 如果我们要做一个静态库的话&#xff0c;首先我们需要把我们源文件(.c/.cpp)隐藏起来&#xff0c;头文件(.h)必须暴露出来&#xff0c; 1.我们先要把我们所有的.c文件编译成.o文件…...

    《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——以Odoo为数据中台低成本实现售前售中一体化

    某机电设备有限公司数字化转型案例&#xff1a;以Odoo为数据中台实现售前售中一体化 一、企业背景某机电设备有限公司在机电设备领域历经多年发展&#xff0c;业务广泛&#xff0c;涵盖工业自动化设备、电力设备等产品的销售与服务。随着业务版图不断拓展&#xff0c;企业面临…...

    携程Android开发面试题及参考答案

    在项目中,给别人发的动态点赞功能是如何实现的? 数据库设计:首先要在数据库中为动态表添加一个点赞字段,用于记录点赞数量,同时可能需要一个点赞关系表,记录用户与动态之间的点赞关联,包括点赞时间等信息。界面交互:在 Android 界面上,为点赞按钮设置点击事件监听器。…...

    Python-列表

    3.1 列表是什么 在Python中&#xff0c;列表是一种非常重要的数据结构&#xff0c;用于存储一系列有序的元素。列表中的每个元素都有一个索引&#xff0c;索引从0开始。列表可以包含任何类型的元素&#xff0c;包括其他列表。 # 创建一个列表my_list [1, 2, 3, four, 5.0]…...

    【LeetCode 刷题】回溯算法-子集问题

    此博客为《代码随想录》二叉树章节的学习笔记&#xff0c;主要内容为回溯算法子集问题相关的题目解析。 文章目录 78.子集90.子集II 78.子集 题目链接 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res, path [], []def dfs(start: int) ->…...

    31.Word:科技论文的译文审交稿【31】

    目录 NO1.2.3​ NO4.5.6 NO7.8样式应用和修改&多级列表​ NO9奇偶页页眉 NO10自动编号&交叉引用 NO11.12 NO1.2.3 另存为/F12&#xff1a;考生文件夹只保留译文内容、格式设置、修订批注&#xff0c;删除其他&#xff1a;删除表格的左列→删除第一行将表格转化成…...

    Java序列化详解

    1 什么是序列化、反序列化 在Java编程实践中&#xff0c;当我们需要持久化Java对象&#xff0c;比如把Java对象保存到文件里&#xff0c;或是在网络中传输Java对象时&#xff0c;序列化机制就发挥着关键作用。 序列化&#xff1a;指的是把数据结构或对象转变为可存储、可传输的…...

    尝试ai生成figma设计

    当听到用ai 自动生成figma设计时&#xff0c;不免好奇这个是如何实现的。在查阅了不少资料后&#xff0c;有了一些想法。参考了&#xff1a;在figma上使用脚本自动生成色谱 这篇文章提供的主要思路是&#xff1a;可以通过脚本的方式构建figma设计。如果我们使用ai 生成figma脚本…...

    每日一题——包含min函数的栈

    包含min函数的栈 题目数据范围&#xff1a;示例C语言代码实现解释1. push(value)2. pop()3. top()4. min() 总结大小堆GPT给的原始代码 题目 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈中所含最小元素的 min 函数&#xff0c;输入操作时保证 pop、top 和 mi…...

    【最后203篇系列】004 -Smarklink

    说明 这个用来替代nginx。 最初是希望用nginx进行故障检测和负载均衡&#xff0c;花了很多时间&#xff0c;大致的结论是&#xff1a;nginx可以实现&#xff0c;但是是在商业版里。非得要找替代肯定可以搞出来&#xff0c;但是太麻烦了&#xff08;即使是nginx本身的配置也很烦…...

    二分法模板

    数组具有二段性&#xff0c;可以分为左右两边合法区和不合法区 如果选择左端点&#xff0c;右边区域不合法&#xff0c;选择 left mid ,right mid - 1; 如果选择右端点&#xff0c;左边区域不合法&#xff0c;选择 left mid 1 ,right mid ; 1.x 的平方根 LCR 072. x 的…...

    基于SpringBoot的智慧康老疗养院管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

    专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

    LabVIEW无人机航线控制系统

    介绍了一种无人机航线控制系统&#xff0c;该系统利用LabVIEW软件与MPU6050九轴传感器相结合&#xff0c;实现无人机飞行高度、速度、俯仰角和滚动角的实时监控。系统通过虚拟仪器技术&#xff0c;有效实现了数据的采集、处理及回放&#xff0c;极大提高了无人机航线的控制精度…...

    STM32CUBEIDE编译的hex使用flymcu下载后不能运行

    测试后确认&#xff0c;不论是1.10版本还是1.16版本&#xff0c;编译生成的hex下载后不能运行&#xff0c;需要更改boot 设置才能开始运行&#xff0c;flymcu下载后已经告知一切正常&#xff0c;跳转到8000 0000处开始运行&#xff0c;实际没有反应&#xff0c;而使用mdk编译生…...

    final-关键字

    一、final修饰的类不能被继承 当final修饰一个类时&#xff0c;表明这个类不能被其他类继承。例如&#xff0c;在 Java 中&#xff0c;String类就是被final修饰的&#xff0c;这保证了String类的不可变性和安全性&#xff0c;防止其他类通过继承来改变String类的行为。 final…...

    在RHEL 8.10上安装开源工业物联网解决方案Thingsboard 3.9

    在RHEL/CentOS/Rocky/AlmaLinux/Oracle Linux 8单节点上安装 备注&#xff1a; 适用于单节点 是否支持欧拉&#xff1f;&#xff1f;&#xff1f; 前提条件 本指南描述了如何在RHEL/CentOS 7/8上安装ThingsBoard。硬件要求取决于所选的数据库和连接到系统的设备数量。要在单…...

    deepseek+vscode自动化测试脚本生成

    近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…...

    k8s支持自定义field-selector spec.hostNetwork过滤

    好久没写博客啦&#xff0c;年前写一个博客就算混过去啦&#x1f602; 写一个小功能&#xff0c;对于 Pod&#xff0c;在没有 label 的情况下&#xff0c;支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型&#xff0c;只为了熟悉 APIServer 是如何构…...

    图像噪声处理技术:让图像更清晰的艺术

    在这个数字化时代&#xff0c;图像作为信息传递的重要载体&#xff0c;其质量直接影响着我们的视觉体验和信息解读。然而&#xff0c;在图像采集、传输或处理过程中&#xff0c;难免会遇到各种噪声干扰&#xff0c;如高斯噪声、椒盐噪声等&#xff0c;这些噪声会降低图像的清晰…...

    w186格障碍诊断系统spring boot设计与实现

    &#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

    【自学笔记】Java的重点知识点-持续更新

    提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Java知识点概览一、Java简介二、Java基本语法三、面向对象编程&#xff08;OOP&#xff09;四、异常处理五、常用类库六、多线程编程七、网络编程 注意事项 总结 Ja…...

    031.关于后续更新和指纹浏览器成品

    关于后续更新 后续决定不再更新了&#xff0c;我低估了各种检测站的更新速度&#xff0c;我开源的一些源码修改方法&#xff0c;已经被个别检测网站加入了针对性检测。只要开源了&#xff0c;一段时间后就会有针对性反检测。这种东西根本就不能开源&#xff0c;开源了大家就一…...

    013-51单片机红外遥控器模拟控制空调,自动制冷制热定时开关

    主要功能是通过红外遥控器模拟控制空调&#xff0c;可以实现根据环境温度制冷和制热&#xff0c;能够通过遥控器设定温度&#xff0c;可以定时开关空调。 1.硬件介绍 硬件是我自己设计的一个通用的51单片机开发平台&#xff0c;可以根据需要自行焊接模块&#xff0c;这是用立创…...

    UE5 蓝图学习计划 - Day 10:UI 系统(HUD 与 Widget)

    在游戏开发中&#xff0c;UI&#xff08;用户界面&#xff09; 是玩家获取游戏信息、与游戏进行交互的重要部分。Unreal Engine 5 提供了 HUD&#xff08;Head-Up Display&#xff09; 和 Widget Blueprint&#xff08;小部件蓝图&#xff09; 来帮助开发者创建 血量条、得分系…...

    QT简单实现验证码(字符)

    0&#xff09; 运行结果 1&#xff09; 生成随机字符串 Qt主要通过QRandomGenerator类来生成随机数。在此之前的版本中&#xff0c;qrand()函数也常被使用&#xff0c;但从Qt 5.10起&#xff0c;推荐使用更现代化的QRandomGenerator类。 在头文件添加void generateRandomNumb…...

    代码随想录刷题笔记

    数组 二分查找 ● 704.二分查找 tips&#xff1a;两种方法&#xff0c;左闭右开和左闭右闭&#xff0c;要注意区间不变性&#xff0c;在判断mid的值时要看mid当前是否使用过 ● 35.搜索插入位置 ● 34.在排序数组中查找元素的第一个和最后一个位置 tips&#xff1a;寻找左右边…...

    VSCode 中的 Git Graph扩展使用详解

    VSCode 中的 Git Graph 详解 1. 什么是 Git Graph&#xff1f; Git Graph 是 VSCode 中的一款 Git 可视化扩展&#xff0c;它提供了一种 图形化方式 来查看 Git 提交历史、分支、合并记录等信息&#xff0c;使得 Git 版本管理更加直观和高效。 通过 Git Graph&#xff0c;你…...

    Day07:缓存-数据淘汰策略

    Redis的数据淘汰策略有哪些 ? &#xff08;key过期导致的&#xff09; 在redis中提供了两种数据过期删除策略 第一种是惰性删除&#xff0c;在设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们再检查其是否过期&#xff0c;如果过期&…...

    【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】

    天气时钟&#xff1a;天气模块开发、主函数编写 I2C协议和SPI协议I2C&#xff08;Inter-Integrated Circuit&#xff09;SPI&#xff08;Serial Peripheral Interface&#xff09; 天气模块心知天气预报使用HTTPClient类介绍主要功能常用函数注意事项 JSON介绍deserializeJson函…...

    简单的SQL语句的快速复习

    语法的执行顺序 select 4 字段列表 from 1 表名列表 where 2 条件列表 group by 3 分组前过滤 having 分组后过滤 order by 5 排序字段列表 limit 6 分页参数 聚合函数 count 统计数量 max 最大值 min 最小值 avg 平均 sum 总和 分组查询使…...

    跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

    Movie Gen&#xff1a;A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型&#xff0c;包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…...

    Rust 所有权特性详解

    Rust 所有权特性详解 Rust 的所有权系统是其内存安全的核心机制之一。通过所有权规则&#xff0c;Rust 在编译时避免了常见的内存错误&#xff08;如空指针、数据竞争等&#xff09;。本文将从堆内存与栈内存、所有权规则、变量作用域、String 类型、内存分配、所有权移动、Cl…...

    基于人脸识别的课堂考勤系统

    该项目是一个基于人脸识别的课堂考勤系统&#xff0c;使用Python开发&#xff0c;结合了多种技术实现考勤功能。要开发类似的基于人脸识别的考勤系统&#xff0c;可参考以下步骤&#xff1a; 环境搭建&#xff1a;利用Anaconda创建虚拟环境&#xff0c;指定Python版本为3.8&am…...

    Deepseek R1 本地化部署指南:跨平台实战

    引言 Deepseek R1 作为一款强大的本地化人工智能工具,支持在多种操作系统上部署,满足开发者和企业私有化运行的需求。本文将手把手教你如何在 Windows、Linux 和 macOS 系统上完成 Deepseek R1 的本地化部署,并附赠常见问题解决技巧! © ivwdcwso (ID: u012172506) 1…...

    Nginx 运维开发高频面试题详解

    一、基础核心问题 原文链接&#xff1a;https://blog.csdn.net/weixin_51146329/article/details/142963853 1、什么是Nginx&#xff1f; Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;它以轻量级和高并发处理能力而闻名。Nginx 的反向代理功能允许它作为前端服务…...

    JVM运行时数据区域-附面试题

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…...

    DeepSeek本地部署详细指南

    DeepSeek本地部署详细指南 随着人工智能技术的飞速发展&#xff0c;本地部署大模型的需求也日益增加。DeepSeek作为一款开源且性能强大的大语言模型&#xff0c;提供了灵活的本地部署方案&#xff0c;让用户能够在本地环境中高效运行模型&#xff0c;同时保护数据隐私。以下是…...

    Debian 10 中 Linux 4.19 内核在 x86_64 架构上对中断嵌套的支持情况

    一、中断嵌套的定义与原理 中断嵌套是指在一个中断处理程序(ISR)正在执行的过程中,另一个更高优先级的中断请求到来,系统暂停当前中断处理程序,转而处理新的高优先级中断。处理完高优先级中断后,系统返回到原来的中断处理程序继续执行。这种机制允许系统更高效地响应紧急…...

    C语言:深入了解指针1

    内存和地址 1. 酒店房间类比内存和地址 场景描述 把计算机的内存想象成一家酒店&#xff0c;每个房间就是一个内存单元&#xff0c;每个房间都有一个唯一的房间号&#xff0c;这个房间号就相当于内存地址。房间里可以存放客人的行李等物品&#xff0c;这些物品就好比存储在内…...

    【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

    Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…...

    游戏引擎 Unity - Unity 下载与安装

    Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

    文本复制兼容方案最佳实现落地。

    文章目录 一、navigator.clipboard.writeText二、方案落地总结 一、navigator.clipboard.writeText navigator.clipboard.writeText 是一个Web API&#xff0c;它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的&#xff0c;并且设计用于提高安全性和用户体验&a…...

    LabVIEW如何高频采集温度数据?

    在LabVIEW中进行高频温度数据采集时&#xff0c;选择合适的传感器&#xff08;如热电偶或热电阻&#xff09;和采集硬件是关键。下面是一些建议&#xff0c;帮助实现高效的温度数据采集&#xff1a; 1. 传感器选择&#xff1a; 热电偶&#xff08;Thermocouple&#xff09;&am…...

    AI智慧社区--人脸识别

    前端 人脸的采集按钮&#xff1a; 首先对于选中未认证的居民记录&#xff0c;进行人脸采集 前端的按钮 <el-form-item><el-button v-has"sys:person:info" type"info" icon"el-icon-camera" :disabled"ids.length < 0" …...

    C++11—右值引用

    目录 简介 左值和右值 左值 右值 右值引用 生命周期 引用折叠 实际应用 移动语义 移动构造函数 移动赋值运算符 完美转发 简介 之前我们曾学习过引用叫左值引用&#xff0c;但那是C98的&#xff0c;在C11中新增了一种引用叫右值引用。右值引用主要用于支持移动语…...

    Workbench 中的热源仿真

    探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下&#xff0c;热源 &#xff08;q&#xff09; 不是通…...

    Windows11 不依赖docker搭建 deepseek-R1 1.5B版本(附 Open WebUi搭建方式)

    零、前言 过年这几天发现 DeepSeek 非常火&#xff0c;试用了一下发现确实不错。与豆包、kimi、perplexity 这些相比完全不是一个次元的存在&#xff0c;特别是用ta写文章的时候体验非常好。所以试着自己搭一个环境。 一、安装 Ollama和DeepSeek-R1 我的安装方式很简单&#xf…...

    Error: Expected a mutable image

    你的函数用了不支持的图片格式比如我的人脸检测&#xff0c;本来要RGB565我却用JPEG所以报错...

    【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步

    Day2 探秘微控制器——单片机与MicroPython初步 目录 Day2 探秘微控制器——单片机与MicroPython初步MicroPython语言基础开始基础语法注释与输出变量模块与函数 单片机基础后记 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机…...

    代码随想录算法训练营Day51 | 101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

    文章目录 101.孤岛的总面积思路与重点 102.沉没孤岛思路与重点 103.水流问题思路与重点 104.建造最大岛屿思路与重点 101.孤岛的总面积 题目链接&#xff1a;101.孤岛的总面积讲解链接&#xff1a;代码随想录状态&#xff1a;直接看题解了。 思路与重点 nextx或者nexty越界了…...