【Linux后端服务器开发】软硬链接与动静态库

news2024/9/27 12:13:11

目录

一、软硬链接

二、动静态库

1. 静态库

2. 动态库


一、软硬链接

软链接:ln -s myfile soft_file.link

硬链接:ln myfile hard_file.link

查看映射关系:ll -li

软硬链接区别:是否具有独立的inode

  • 软链接具有独立的inode:可以当作独立文件
  • 硬链接没有独立的inide:没有创建新文件

硬链接使用的是别人的inode和内容,就是在指定的路径下新增文件名和inode编号映射关系

当一个文件的硬链接数变为0时,一个文件才算真正的删除

新建文件的默认硬链接数为1,新建目录的默认硬链接数为0

软链接可视作快捷方式

二、动静态库

静态库:.a

动态库:.so

库:将 .o 文件链接之后的库文件和对应的 .h 文件进行打包

编译链接库:gcc -o 可执行文件 源文件 -I 库对应的头文件路径 -L 库的路径 -l 库名(去除前后缀)

                                                         (Include)                      (Lib)

安装:本质是拷贝,将程序的库和相关头文件拷贝到系统对应的路径下

  • sudo cp 第三方库对应的头文件 系统头文件路径(/usr/include)
  • sudo cp 第三方库系统路径库(/lib64)

动态库:

  • .c 文件用gcc汇编成 .o 文件时,加上 -fPIC(与位置无关码)
  • 链接 .o 文件时加上 -shared ,表示形成的不是可执行文件,而是动态库

编译链接完成后,告诉OS和shell动态库位置:

  1. 和静态库类似,将 .h 文件和 .so 文件复制到系统路径下
  2. 添加环境变量,但系统重启后失效
  3. 配置 /etc/ld.so.conf.d 文件,在此目录下创建一个 *.conf 文件,将第三方动态库的路径写入该文件,然后在该文件目录用idconfig 更新设置
  4. 建立软链接,在当前路径或者系统路径下创建动态库的软链接,系统默认路径是当前路径和系统库路径

使用第三方库:

  • 安装第三方库
  • 编译的时候加上库名

gcc默认是动态链接(建议行为),对一个特定的库,究竟是静态还是动态,取决于库本身是静态还是动态

1. 静态库

原理:将库代码拷贝到代码区

库编写者writer

libmymath.a: add.o sub.o
    ar -rc $@ $^
add.o: add.c
    gcc -c add.c
sub.o: sub.c
    gcc -c sub.c

.PHONY:output
output:
    mkdir -p mylib/include
    mkdir -p mylib/lib
    cp -f *.h mylib/include
    cp -f *.a mylib/lib

.PHONY:clean
clean:
    rm -rf *.o libmymath.a

用户user

交付库(安装)

编译链接库

安装

注:不建议将测试代码、测试库直接放入系统库中

2. 动态库

原理:指定函数的地址,写入到可执行程序中

库编写者write

libmymath.so: add.o sub.o
    gcc -shared -o $@ $^
add.o: add.c
    gcc -c -fPIC add.c
sub.o: sub.c
    gcc -c -fPIC sub.c

.PHONY:output
output:
    mkdir -p mylib/include
    mkdir -p mylib/lib
    cp -f *.h mylib/include
    cp -f *.so mylib/lib

.PHONY:clean
clean:
    rm -rf *.o libmymath.so mylib

用户user

告诉OS和shell动态库位置

方案一:安装,类似静态库(略)

方案二:添加环境变量,重启中断之后失效

方案三:配置 /etc/ld.so.conf.d 文件,永久有效

方案四:建立软链接,永久有效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Appium+python自动化(一)- 环境搭建—上(超详解)

最近整理了一下自动化的东西,先前整理的python接口自动化已经接近尾声。即将要开启新的征程和篇章(Appium&python)。那么首相的问题就是搭建环境了。好久没搭建环境又踩了不少坑,appium的环境搭建比较繁琐,好多同行…

零撸X2E大热门​Salad Venture的空投!

Salad Venture 随着Web3的走红,X to Earn成为热门概念,其中X可指运动、购物、游戏、学习和创作等诸多应用场景,Earn则是通过这些特定场景产生经济收益。与Web2企业将利益分配权牢牢掌握在自己手中不同,X to Earn的本质是将参与者…

Coggle 30 Days of ML(23年7月)任务七:训练TextCNN模型

Coggle 30 Days of ML(23年7月)任务七:训练TextCNN模型 任务七:使用Word2Vec词向量,搭建TextCNN模型进行训练和预测 说明:在这个任务中,你将使用Word2Vec词向量,搭建TextCNN模型进…

【LeetCode热题100】打卡第32天:最长连续序列只出现一次的数字单词拆分环形链表

文章目录 【LeetCode热题100】打卡第32天:最长连续序列&只出现一次的数字&单词拆分&环形链表⛅前言 最长连续序列🔒题目🔑题解 只出现一次的数字🔒题目🔑题解 单词拆分🔒题目🔑题解…

webAPI学习笔记5——移动端网页特效和本地存储

一、移动端网页特效 1. 触屏事件 1.1 触屏事件概述 移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。比如触屏事件 touch(也称触摸事件&#xff09…

联想M7605DW怎么连接WiFi网络

联想M7605DW是一款拥有WiFi功能的打印机,可以通过WiFi连接无线网络,实现打印无线传输。 首先,需要确保你的WiFi网络已经正常连接,并且知道WiFI的网络名称和密码,同时确保你的电脑或手机设备与WiFi相连接。 启动联想M76…

数组、指针练习题及解析(含笔试题目讲解)其一

目录 前言 题目列表: 题目解析 一维数组 字符数组 字符串 字符指针 二维数组 笔试题 总结 前言 前几期的博客已经将有关指针、数组的所以知识都已基本讲解完毕,那么接下来我们就做一些练习巩固,这些练习依据历年来一些公司笔试题进行…

java的ThreadLocal变量

Java的ThreadLocal变量是线程的局部变量,只能被本线程访问,不能被其它线程访问,也就是说线程间进行了隔离。每个线程访问该变量的一个独立拷贝,互相不干扰。感觉跟synchronized的作用相反,synchronized是为了保护线程间…

Kafka入门,mysql5.7 Kafka-Eagle部署(二十五)

官网 https://www.kafka-eagle.org/ 下载解压 这里使用的是2.0.8 创建mysql数据库 创建名为ke数据库,新版本会自动创建,不会创建的话,自己手动创建,不然会报查不到相关表信息错误 SET NAMES utf8; SET FOREIGN_KEY_CHECKS 0;-- ------…

从2023中国峰会,看亚马逊云科技的生成式AI战略

“生成式AI的发展就像一场马拉松比赛,当比赛刚刚开始时,如果只跑了三四步就断言某某会赢得这场比赛,显然是不合理的。我们现在还处于非常早期的阶段。” 近日,在2023亚马逊云科技中国峰会上,亚马逊云科技全球产品副总裁…

智慧农业:温室大棚物联网系统,助力实现可视化科学管理

我国传统农业的特点是靠天吃饭,而智慧农业发端于物联网设备和对应的农业信息化管理系统,是利用数字技术、数据分析和人工智能等先进技术手段,对农业生产进行精细化管理和智能化决策的一种新型农业生产模式。它可以通过实时监测、预测和调控土…

java 配置打包Spring Boot项目过程中跳过测试环节

上文 java 打包Spring Boot项目,并运行在windows系统中中 我们演示了打包 Spring Boot项目的并运行在本地的方法 但是 我们这里会看到 每次打包 他这都会有个T E S T S 测试的部分 但是 我们自己开发的程序 要上线 有没有问题我们肯定自己清楚啊 没必要它做测试 而且…

web学习笔记2

文档流 网页是一个多层的结构,设置样式也是一层一层的设置,最终我们看到的最上面的一层。 文档流是网页最底层 我们创建的元素默认情况下,都在文档流中 元素分为两种状态:在文档流中,脱离文档流 元素在文档流中的特点 …

同一段数据分别做傅里叶变化和逆变换的结果及分析

已知有公式 D F T : X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N , 0 ≤ k ≤ N − 1 DFT:Χ[k]\sum_{n0}^{N-1}x[n]e^{-\frac{j2\pi kn}{N}},0≤k≤N-1 DFT:X[k]n0∑N−1​x[n]e−Nj2πkn​,0≤k…

超详细 | 模拟退火-粒子群自适应优化算法及其实现(Matlab)

作者在前面的文章中介绍了经典的优化算法——粒子群算法(PSO),各种智能优化算法解决问题的方式和角度各不相同,都有各自的适用域和局限性,对智能优化算法自身做的改进在算法性能方面得到了一定程度的提升,但算法缺点的解决并不彻底…

学生公寓智能电表控电系统的技术要求

学生公寓电表智能控电石家庄光大远通电气有限公司模块采用高精度计量芯片,的计量计费功能。 控制路数:可输出1~4路输出,每个回路都可以设置负载识别,定时断送过载功率等控电参数。 自动断电 :具有自动断电功能,可用电量为0时,应自动切断该分路电源 支持正…

创建Spring CloudDEMO流程

创建普通的maven工程作为父工程 然后设置字符集为UTF-8 再注解生效激活 java编译版本选择8 idea文件忽略(忽略乱七八糟的文件) *.hprof;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;vssver.scc;vssver2.scc;.idea;*.iml…

TencentOS3.1安装PHP+Nginx+redis测试系统

PHP和Nginx应用统一安装在/application下。 Nginx选用了较新的版本1.25.0 官网下载安装包,解包。执行如下命令编译: ./configure --prefix/application/nginx-1.25.0 --usernginx --groupnginx --with-http_ssl_module --with-http_stub_status_modu…

win系统电脑在线打开sketch文件的方法

自Sketch诞生以来,只有Mac版本。Windows计算机如何在线打开Sketch文件? 即时设计已经解决了你遇到的大部分问题,不占用内存也是免费的。 您可以使用此软件直接在线打开Sketch文件,完整预览并导出CSS、SVG、PNG等,还具…

解析JSON格式数据

解析JSON格式数据 比起XML,JSON的体积更小,语义性更差 传入的JSON文件如下 使用JSONObject private fun parseJSONWithJSONObject(jsonData: String) { try { val jsonArray JSONArray(jsonData) for (i in 0 until jsonArray.length()){ val j…