软硬链接与动静态库概览

1. 硬链接

关键词 ln

  • ln file newname

Linux 系统中,通过 inode 找到磁盘文件;

file.txt 创建硬链接,相当于让新的文件名(字符串)对同一个 inode 建立映射关系,引用计数++

rm file.txt 使 引用计数-- ,当引用计数减为 0 时,才对磁盘文件进行删除。

  • 创建一个新的目录

要了解 “为什么一个新目录的引用计数为 2”,首先需要明晰一个概念:Linux 中,一切皆文件

意味着,目录也是一个文件,保存着该目录内文件的文件名与其 inode 的映射关系

cd file

. 代表当前文件file;

创建一个新文件,“file” 和 “.” 同时建立了与 inode — 528280 的映射关系,故引用计数为 2。

“blog” “blog/.” “blog/file/…” 都与 inode — 528284 建立了映射关系,故引用计数为 3,以此类推…

2. 软链接

软链接(符号链接) 相当于 Windows 中的快捷方式

ln -s file newfile

创建软链接时,[-s] 为必选项

硬链接 是通过 inode 引用另外一个文件,软链接 是通过 名字 引用另外一个文件;

软链接本身是一个独立的文件,且有自己的 inode 。

3. 动静态库

静态库是一组预先编译好的目标文件集合,它们在程序的链接阶段被合并到最终的可执行程序中;

动态库是在程序运行时,才被加载到内存中的库,不会在编译阶段合并到可执行程序中。

当动静态库同时存在时,OS 优先使用动态库

生成并使用动静态库 :
// matrix.h matrix.c test.c 在文末给出
  • 静态库

gcc -c matrix.c -o matrix.o // 将 [所有.c] 文件编译成 [.o] 文件

ar -rc libmymatrix.a -o matrix.o // … lib[库名].a -o [+所有必须的.o文件]

gcc test.c -L. -lmymatrix // -L[库所在路径] -l[库名]

  • 动态库

gcc -fPIC -c matric.c // gcc -fPIC -c [所有必须的 .c 文件]

gcc -shared -o libmymatrix.so matrix.o //

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[库所在路径] // = 前后不能有 [空格] ;将 库所在路径 添加到 环境变量"LD_LIBRARY_PATH"

步骤三也可以通过 1. 将 libmymatrix.so 拷到系统库目录下 2. 将 libmymatirx.so 在系统库目录下创建软链接 等方式解决 —— OS 能查找到我们的库即可。

gcc test.c -L. -lmymatrix

// matrix.h
#pragma 1

#include <stdbool.h>

#undef NULL 
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif


// 矩阵置零
void setZeroes(int** matrix, int matrixSize, int* matrixColSize);
// 螺旋矩阵
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize);
// 旋转图像
void rotate(int** matrix, int matrixSize, int* matrixColSize);
// 搜索二维矩阵
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target);
// matrix.c
#include "matrix.h"

// 矩阵置零
void setZeroes(int** matrix, int matrixSize, int
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值