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

【Linux】动静态库的使用

📝前言:

这篇文章我们来讲讲Linux——动静态库的使用

🎬个人简介:努力学习ing
📋个人专栏:Linux
🎀CSDN主页 愚润求学
🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏


这里写目录标题

  • 一,什么是库
  • 二,静态库
    • 认识静态库
      • 形成静态库
      • 查看库的详细信息
    • 使用静态库
      • 源文件链接库形成可执行文件
  • 三,动态库
    • 认识动态库
      • 形成动态库
    • 使用动态库
      • 查看链接关系
      • 添加动态库
      • 把头文件添加到默认路径
  • 四,使用外部库

一,什么是库

基本概念:

  • 库是写好的现有的,成熟的,可以复用的代码
  • 静态库: .a[Linux]、.lib[windows]
  • 动态库: .so[Linux]、.dll[windows]
  • 库的命名规则,前缀lib + NAME + 后缀库类型(其中真正的库名是NAME
    • 示例:名字为c的静态库:libc.a.a后面还可以跟其他后缀

动静态库的形成:

  • 动静态库,通常都是由.o文件打包来的
  • .o文件是编译后形成的可重定向目标文件

二,静态库

认识静态库

  • 静态库在链接的时候,把用到的库函数的代码链接(拷贝)到可执行文件中,后续运行时不再需要静态库

形成静态库

多个.o文件打包成静态库示例:

Makefile文件:

  1 libmyc.a: mystdio.o mystring.o                                                                                                                                                                               2     ar -rc $@ $^3 %.o:%.c4     gcc -c $<5 .PHNOY:clean6 clean:7     rm -rf *.a *.o8 
  • ar:归档打包,打包完以后,未来不用解包,可以直接使用gcc/g++链接

运行示例:
在这里插入图片描述

查看库的详细信息

ar -tv 库可以查看的信息:
在这里插入图片描述

使用静态库

源文件链接库形成可执行文件

使用gcc链接:

  • 选项-l:接要链接的库名称
  • 选项-L:接要找的库所在的目录路径(不带-L系统去默认路径下找库)
  • 选项-I:接要找的头文件所在的目录路径(不带-I,系统去默认路径下找头文件,并且会在当前目录找)

使用静态库链接,形成可执行文件示例:

gcc -o test test.c -I ./ -L ./ -l myc

上面这种写法就是全链路写法。一旦静态库链接成功,本质已经把对应的库函数代码拷贝给了可执行文件,后续无序找库,一定能运行成功。

  • 当动静态库同时存在的时候,gcc会默认使用动态库。如果非要使用静态库,需要带-static选项(带了这个选项,就必须存在对应的静态库)

三,动态库

认识动态库

  • 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码
  • 动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。
  • 动态库是运行时链接,运行时还需要依赖动态库。不像静态库一旦编译链接成功以后就一定可以运行成功。

形成动态库

  • 动态库用gcc打包, 带-shared选项
  • 形成的.o文件要带-fPIC选项(用于生成位置无关代码,动态库的.o文件要求)

Makefile文件:

  1 libmyc.so: mystdio.o mystring.o2     gcc -o $@ $^ -shared                                                                                                                                                                                     3 %.o:%.c4     gcc -fPIC -c $<5 .PHONY:clean6 clean:7     rm -rf *.so *.o

在这里插入图片描述

使用动态库

同样有三种使用方法:

// 场景1:头⽂件和库⽂件安装到系统路径下(不带 -I 和 -L 都去系统路径找)
gcc main.c -lmystdio// 场景2:头⽂件和库⽂件和我们⾃⼰的源⽂件在同⼀个路径下(不带 -I 头文件回去当前目录找)
gcc main.c -L. -lmymath // 从左到右搜索-L指定的⽬录// 场景3:头⽂件和库⽂件有⾃⼰的独⽴路径(都不在当前路径,找不到就要指明路径)
gcc main.c -I头⽂件路径 -L库⽂件路径 -lmymath

示例:
在这里插入图片描述
但是,为什么编译链接,形成可执行文件后,还是运行不了,说没找到?

查看链接关系

ldd + 可执行文件名,可查看链接的动态库
在这里插入图片描述
我们发现,libmyc.sonot found。这是因为,我们前面提供的-L只是告诉了编译器,但是系统任然不知道我们的动态库在哪里。

解决方法如下:

添加动态库

  1. 直接把库拷贝一份到系统默认找库的文件夹,一般是:/usr/lib、/usr/local/lib、/lib64(但是这不推荐,会污染系统目录)
  2. 在系统默认拷贝的文件夹里面添加对应动态库的软链接
  3. 更改环境变量: LD_LIBRARY_PATH(这个变量有可能为空,我们可以自行export导入)
  4. 配置/etc/ld.so.conf.d/ :在这个目录下新建一个任意名称的配置文件,然后再文件里面放动态库的路径(系统会默认去里面找)【但是这个好像写不进去】
    • 改完这个配置以后,ldconfig 可以重新加载配置,才能生效

我们使用解决方法3,添加后,运行程序:

export LD_LIBRARY_PATH="/home/tr/code/Linux_learn/library_un:$LD_LIBRARY_PATH"
  • ::用来分割路径
  • $LD_LIBRARY_PATH:获取原来的环境变量值,然后再次基础上添加
  • 建议使用绝对路径
    在这里插入图片描述

此时就链接上了,a.out运行结果:
在这里插入图片描述

把头文件添加到默认路径

  • 同样,头文件有默认搜索的路径:/usr/include。我们可以拷贝文件进去,或者建立软链接
  • 设置CPATH环境变量(针对 C 语言)或者CPLUS_INCLUDE_PATH环境变量(针对 C++)
  • 但是更建议:-I

四,使用外部库

库的安装,就是把库对应的文件拷贝到了指定(默认搜索)的目录下

这里我们安装一个ncurse

我们可以查看一下/usr/lib/usr/include,看看有没有这个外部库的库文件和头文件
/usr/include里面的
在这里插入图片描述

我们简单使用一下(参考文章:ncurse编程指南),在屏幕左上角打印Hello, World

  1 #include <ncurses.h>                                                                                                                                                                                         2 3 int main()4 {5     initscr(); // 初始化屏幕,默认stdscr6     printw("Hello World");// 与printf相似但是打印到虚拟窗口stdscr7 8     refresh();// 需要刷新才能显示到屏幕上9     getch(); // 等待用户输入10     endwin(); // 关闭窗口11     return 0;12 }

编译链接,gcc -o test2 test2.c -lncurses,并运行:
在这里插入图片描述


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关文章:

【Linux】动静态库的使用

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux——动静态库的使用 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础&…...

10.2 LangChain v0.3全面解析:模块化架构+多代理系统如何实现效率飙升500%

LangChain 框架概述 关键词:LangChain 技术栈, 模块化架构, LCEL 表达式语言, LangGraph 多代理系统, LangServe 服务化部署 1. 框架定位与技术演进 LangChain 是当前大模型应用开发的事实标准框架,通过模块化设计实现 AI 工作流编排、工具链集成 和 复杂业务逻辑封装。其演…...

开源免费iOS或macOS安装虚拟机运行window/Linux系统

官网地址&#xff1a;UTM 开源地址&#xff1a;https://github.com/utmapp/UTM 基于 QEMU&#xff08;一个开源的硬件虚拟化工具&#xff09;&#xff0c;UTM 可以在 macOS&#xff08;包括 Apple Silicon M1/M2 和 Intel x86&#xff09;上运行 Windows、Linux、macOS&…...

《C++ vector详解》

目录 1.结构 2.构造函数 无参构造 指定参数构造 迭代器构造 初始化列表构造 3.拷贝构造 4.析构函数 5.遍历 重载【】 5.插入 扩容 尾插 指定位置插入 6.删除 尾删 指定位置删除 1.结构 vector是一个类似于数组一样的容器&#xff0c;里面可以放各种各样的元素…...

【现代深度学习技术】注意力机制07:Transformer

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

浅析 Spring 启动过程:从源码到核心方法

浅析 Spring 启动过程&#xff1a;从源码到核心方法 一、Spring 注解方式启动类 Demo二、Spring 启动过程源码解析​AnnotationConfigApplicationContext构造函数refresh()方法详解 三、refresh()的核心方法/步骤obtainFreshBeanFactory() - 获取Bean工厂prepareBeanFactory(be…...

5G + 区块链:技术巨浪下的新型数字生态!

5G + 区块链:技术巨浪下的新型数字生态! 1. 为什么 5G 和区块链的结合如此重要? 区块链和 5G 这两大技术近几年风头正劲,一个在去中心化数据管理上展现潜力,一个在高吞吐低延迟通信方面带来颠覆。这两者结合,意味着: 更快的数据传输,让区块链交易速度提升,摆脱“低 …...

时序数据库IoTDB分布式架构解析与运维指南

一、IoTDB分布式架构概述 分布式系统由一组独立的计算机组成&#xff0c;通过网络通信&#xff0c;对外表现为一个统一的整体。IoTDB的原生分布式架构将服务分为两个核心部分&#xff1a; ‌ConfigNode&#xff08;CN&#xff09;‌&#xff1a;管理节点&#xff0c;负责管理…...

CertiK荣获以太坊基金会两项资助,领跑zkEVM形式化验证

近日&#xff0c;以太坊基金会公布了2025年第一季度研究资助名单&#xff0c;全球最大的Web3.0安全公司CertiK荣获两项研究资助&#xff0c;源于zkEVM形式化验证竞赛。这不仅是以太坊扩展性战略的里程碑式事件&#xff0c;也进一步彰显了CertiK在零知识证明&#xff08;ZKP&…...

c++和c的不同

c:面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;STL&#xff0c;模板 一、基础定义与背景 C语言 诞生年代&#xff1a;20世纪70年代&#xff0c;Dennis Ritchie在贝尔实验室开发。主要特点&#xff1a; 过程式、结构化编程面向系统底层…...

光流 | Matlab工具中的光流算法

在MATLAB中,光流算法用于估计图像序列中物体的运动。以下是详细解释及实现步骤: 1. 光流算法基础 光流基于两个核心假设: 亮度恒定:同一物体在连续帧中的像素亮度不变。微小运动:相邻帧之间的时间间隔短,物体运动幅度小。常见算法: Lucas-Kanade (局部方法):假设局部窗…...

@Controller 与 @RestController-笔记

1.Controller与RestController对比 Spring MVC 中 Controller 与 RestController 的功能对比&#xff1a; Controller是Spring MVC中用于标识一个类作为控制器的标准注解。它允许处理HTTP请求&#xff0c;并返回视图名称&#xff0c;通常和视图解析器一起使用来渲染页面。而R…...

LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树

LeetCode 热题 100 | 105. 从前序与中序遍历序列构造二叉树 大家好&#xff0c;今天我们来解决一道经典的二叉树问题——从前序与中序遍历序列构造二叉树。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求根据给定的前序遍历和中序遍历序列&#xff0c;构造并返回二叉树…...

IP地址查询助力业务增长

IP地址查询的技术基石 IP地址分为IPv4和IPv6&#xff0c;目前IPv4仍广泛应用&#xff0c;它由四个0-255的十进制数组成&#xff0c;如192.168.1.1。而IPv6为应对IPv4地址枯竭问题而生&#xff0c;采用128位地址长度&#xff0c;极大扩充了地址空间。IP地址查询主要依赖庞大的I…...

Nginx核心功能及同类产品对比

Nginx 作为一款高性能的 Web 服务器和反向代理工具&#xff0c;凭借其独特的架构设计和丰富的功能&#xff0c;成为互联网基础设施中不可或缺的组件。以下是其核心功能及与同类产品&#xff08;如 HAProxy、LVS&#xff09;的对比优势&#xff1a; 一、Nginx 核心功能 高性能架…...

抽奖系统-奖品-活动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言获取奖品列表前端页面活动创建需求分析活动创建后端实现1-控制层实现及校验活动活动创建后端实现2-保存信息活动插入活动奖品插入 整合活动信息存入redis测试活…...

【Java】 volatile 和 synchronized 的比较及使用场景

在 Java 的并发编程中&#xff0c;volatile 和 synchronized 是两个常用的关键字&#xff0c;它们分别用于保证多线程环境中的 可见性 和 原子性&#xff0c;但它们的工作原理和适用场景却有所不同。今天&#xff0c;我们将深入探讨这两个关键字的异同&#xff0c;帮助大家理解…...

javaScript简单版

简介 JavaScript&#xff08;简称:JS)是一门跨平台、面向对象的脚本语言&#xff0c;是用来控制网页行为&#xff0c;实现页面的交互效果。 JavaScript和Java是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似。 组成: ECMAScript:规定了JS基础语法核心知…...

三种常见接口测试工具(Apipost、Apifox、Postman)

三种常见接口测试工具&#xff08;Apipost、Apifox、Postman&#xff09;的用法及优缺点对比总结&#xff1a; &#x1f527; 一、Apipost ✅ 基本用法 支持 RESTful API、GraphQL、WebSocket 等接口调试自动生成接口文档支持环境变量、接口分组、接口测试用例编写可进行前置…...

蓝桥杯13届国B 完全日期

题目描述。 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021 年 6 月 5 日的各位数字之和为 20216516&#xff0c;而 16 是一个完全平方数&#xff0c;它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。 例如&…...

kafka connect 大概了解

kafka connect Introduction Kafka Connect is the component of Kafka that provides data integration between databases, key-value stores, search indexes, file systems, and Kafka brokers. kafka connect 是一个框架&#xff0c;用来帮助集成其他系统的数据到kafka…...

嵌入式培训之数据结构学习(三)gdb调试、单向链表练习、顺序表与链表对比

目录 一、gdb调试 &#xff08;一&#xff09;一般调试步骤与命令 &#xff08;二&#xff09;找段错误&#xff08;无下断点的地方&#xff09; &#xff08;三&#xff09;调试命令 二、单向链表练习 1、查找链表的中间结点&#xff08;用快慢指针&#xff09; 2、找出…...

MySQL——九、锁

分类 全局锁表级锁行级锁 全局锁 做全库的逻辑备份 flush tables with read lock; unlock tables;在InnoDB引擎中&#xff0c;我们可以在备份时加上参数–single-transaction参数来完成不加锁的一致性数据备份 mysqldump --single-transaction -uroot -p123456 itcast>…...

精益数据分析(57/126):创业移情阶段的核心要点与实践方法

精益数据分析&#xff08;57/126&#xff09;&#xff1a;创业移情阶段的核心要点与实践方法 在创业的浩瀚征程中&#xff0c;每一个阶段都承载着独特的使命与挑战。今天&#xff0c;我们继续秉持共同进步的理念&#xff0c;深入研读《精益数据分析》&#xff0c;聚焦创业的首…...

服务器被打了怎么应对

云服务器遭受攻击该如何应对&#xff1f; 在互联网时代&#xff0c;不少使用云服务器的网络工作者常常会面临网络攻击的威胁。若云服务器未配置完善的防火墙&#xff0c;极易引发服务器宕机&#xff0c;甚至被封禁隔离&#xff08;俗称“陷入黑洞”&#xff09;&#xff0c;进…...

Halcon案例(二):C#联合Halcon回形针以及方向

本案例分3部分 识别效果,分别显示识别前后识别后;代码展示,分别是Halcon源码和Halcon转为C#的代码代码解释(解释在源码中); 原图如下 识别后图像: 其中计算回形针与X轴之间的夹角 Halcon代码: * clip.hdev: Orientation of clips *识别图像中的回形针,并且计算回形针与X轴之间…...

Spyglass:跨时钟域同步(同步单元)

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 简介 同步单元方案可以用于控制/数据信号跨时钟域同步&#xff0c;该方案使用约束或参数将目标时钟域中单元指定为同步单元&#xff0c;如图1所示。 图1 同步单元方案…...

JAVA异常体系

在 Java 里&#xff0c;异常体系是其错误处理机制的核心内容&#xff0c;它能够帮助开发者有效应对程序运行时出现的各种意外状况。 异常体系的基本架构 它主要包含两个重要分支&#xff1a; Error&#xff08;错误&#xff09;&#xff1a;这类异常是程序自身无法处理的严重…...

Milvus 视角看主流嵌入式模型(Embeddings)

嵌入是一种机器学习概念&#xff0c;用于将数据映射到高维空间&#xff0c;其中语义相似的数据被紧密排列在一起。嵌入模型通常是 BERT 或其他 Transformer 系列的深度神经网络&#xff0c;它能够有效地用一系列数字&#xff08;称为向量&#xff09;来表示文本、图像和其他数据…...

全面解析 Server-Sent Events(SSE)协议:从大模型流式输出到实时通信场景

全面解析 Server-Sent Events&#xff08;SSE&#xff09;协议&#xff1a;从大模型流式输出到实时通信场景 一、SSE 协议概述 Server-Sent Events&#xff08;SSE&#xff09; 是 HTML5 标准中定义的一种基于 HTTP 的服务器向客户端单向推送实时数据的协议。其核心特性包括&a…...

数据库系统概论|第七章:数据库设计—课程笔记

前言 本章讨论数据库设计的技术和方法&#xff0c;主要讨论基于关系数据库管理系统的关系数据库设计问题&#xff0c;而关于数据库的设计过程中&#xff0c;关于数据模型、关系模型等基本概念在前文中已经有详尽介绍&#xff0c;此处便不再赘述&#xff0c;本文主要围绕概念结…...

Java项目拷打(外卖+点评)

一、点评星球&#xff08;黑马点评&#xff09; 1、项目概述 1.1、项目简介 本项目是基于Spring Boot与Redis深度整合的前后端分离的点评平台。系统以Redis为核心技术支撑&#xff0c;重点解决高并发场景下的缓存穿透、击穿、雪崩等问题&#xff0c;涵盖商户展示、优惠券秒杀…...

MCP:开启AI的“万物互联”时代

MCP&#xff1a;开启AI的“万物互联”时代 ——从协议标准到生态革命的技术跃迁 引言&#xff1a;AI的“最后一公里”困境 在2025年的AI技术浪潮中&#xff0c;大模型已从参数竞赛转向应用落地之争。尽管模型能生成流畅的对话、创作诗歌甚至编写代码&#xff0c;但用户逐渐发现…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-D. 扩展插件列表(PostGIS/PostgREST等)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 附录D. PostgreSQL扩展插件速查表一、插件分类速查表二、核心插件详解三、安装与配置指南四、应用场景模板五、版本兼容性说明六、维护与优化建议七、官方资源与工具八、附录…...

Spring Boot拦截器详解:原理、实现与应用场景

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、拦截器概述 拦截器&#xff08;Interceptor&#xff09;是Spring MVC框架中用于对请求进行预处理和后处理的组件&#xff0c;主要作用于Controller层。相…...

万字解析:Java字符串

目录 一、 String类 1. String类的初始化 1.1 常用的三种构造String类的方式 1.2 String类如何存储字符串&#xff1f; 2. String类的常用功能方法 2.0 字符串长度的获取 2.1 String对象的比较 2.2 字符/字符串的查找 2.3 字符串的转化 2.4 字符 / 字符串的替换 2.5…...

0514得物、0509滴滴面试总结复盘

目前最欠缺的还是&#xff0c;编码不是很熟&#xff0c;很多都遇到过但是就是写不出来&#xff0c;或者靠背先写一点&#xff0c;然后去加&#xff0c;加的过程没考虑逻辑是不是对的&#xff0c;用滴滴面试官的一句话&#xff0c;就是多刷多练多编码&#xff01; 第二块就是项目…...

记录算法笔记(20025.5.14)对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中节点数目…...

AI大模型从0到1记录学习 linux day23

第 1 章 MySQL概述 1.1 基本概念 1.1.1 数据库是什么&#xff1f; 数据库&#xff08;DB&#xff1a;Database&#xff09;&#xff1a;存储数据的地方。 1.1.2 为什么要用数据库&#xff1f; 应用程序产生的数据是在内存中的&#xff0c;如果程序退出或者是断电了&#xff0c;…...

用git下载vcpkg时出现Connection was reset时的处理

用git安装vcpkg时出现Connect was rest&#xff08;如上图&#xff09;。多谢这位网友的博文解决了问题&#xff1a; 通过:http.sslVerify false全局来设置&#xff0c;执行以下命令&#xff1a; git config --global http.sslVerify "false" 原文链接&#xff1a…...

【数据库复习】SQL语言

一、SQL通用语法与分类 &#xff08;一&#xff09;SQL通用语法 SQL语句的格式通常较为规范&#xff0c;以关键字开头&#xff0c;如CREATE、SELECT、INSERT等&#xff0c;后跟具体的表名、字段名和条件等。在MySQL中&#xff0c;还可以使用help命令获取帮助信息&#xff0c;…...

二叉树——层序遍历

目录 实现层序遍历 判断是否为完全二叉树 实现层序遍历 除了先序遍历&#xff0c;中序遍历&#xff0c;后序遍历外&#xff0c;还可以对二叉树进行层序遍历。设二叉树的结点所在层数为1&#xff0c;层序遍历就是从所在二叉树的根结点出发&#xff0c;首先访问第一层的树根结点…...

Seata源码—2.seata-samples项目介绍

大纲 1.seata-samples的配置文件和启动类 2.seata-samples业务服务启动时的核心工作 3.seata-samples库存服务的连接池配置 4.Seata对数据库连接池代理配置的分析 5.Dubbo RPC通信过程中传递全局事务XID 6.Seata跟Dubbo整合的Filter(基于SPI机制) 7.seata-samples的AT事…...

企业数字化转型背景下的企业知识管理挑战与经验杂谈

一、引言 在数字化转型的浪潮下&#xff0c;企业知识管理正面临前所未有的挑战。随着数据量的急剧增长&#xff0c;企业内部积累的信息呈现出碎片化、分散化的趋势&#xff0c;传统的知识管理体系已难以有效应对这一变革。首先&#xff0c;信息碎片化问题日益严重&#xff0c;…...

第二章:磁盘管理与文件管理

一、磁盘管理 1.windows和Linux磁盘管理的区别 windows资源管理方式 系统一般安装在C盘 C盘下的"Windows"目录是操作系统的核心 C盘下的"Program Files"目录下安装软件 C盘下的"用户"目录是所有的用户&#xff0c;包括超级管理员也在其中 …...

Java版OA管理系统源码 手机版OA系统源码

Java版OA管理系统源码 手机版OA系统源码 一&#xff1a;OA系统的主要优势 1. 提升效率 减少纸质流程和重复性工作&#xff0c;自动化处理常规事务&#xff0c;缩短响应时间。 2. 降低成本 节省纸张、打印、通讯及人力成本&#xff0c;优化资源分配。 3. 规范管理 固化企…...

springboot踩坑记录

之前运行好端端的项目&#xff0c;今天下午打开只是添加了一个文件之后 再运行都报Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class Action: Conside…...

SpringAI

机器学习&#xff1a; 定义&#xff1a;人工智能的子领域&#xff0c;通过数据驱动的方法让计算机学习规律&#xff0c;进行预测或决策。 核心方法&#xff1a; 监督学习&#xff08;如线性回归、SVM&#xff09;。 无监督学习&#xff08;如聚类、降维&#xff09;。 强化学…...

acwing 1488. 最短距离 超级源点 最短路 堆优化Dijkstra

经验总结 邻接表 节点1连接到节点2&#xff0c;权重为3。 节点1连接到节点3&#xff0c;权重为5。 节点2连接到节点4&#xff0c;权重为2。 g[1] {{2, 3}, {3, 5}} g[2] {{1, 3}, {4, 2}} g[3] {{1, 5}} g[4] {{2, 2}} vector<vector<PII>> g;题目背景 有 N…...

2002-2024年地级市新质生产力词频统计数据(46个关键词词频)

2002-2024年地级市新质生产力词频统计数据&#xff08;46个关键词词频&#xff09; 1、时间&#xff1a;2002-2024年 2、来源&#xff1a;ZF工作报告 3、指标&#xff1a;行政区划代码、年份、地区、所属省份、文本总长度、仅中英文-文本总长度、文本总词频-全模式、文本总词…...