Linux中的软硬链接和动静态库

硬链接

ln myfile.txt hard_file.link
264962 -rw-rw-r--  2 zhangsan zhangsan    0 Sep 30 03:16 hard_file.link
264962 -rw-rw-r--  2 zhangsan zhangsan    0 Sep 30 03:16 myfile.txt
273922 lrwxrwxrwx  1 zhangsan zhangsan   10 Sep 30 03:17 soft_file.link -> myfile.txt

 硬链接没有独立的iNode

建立硬链接,根本没有创建新文件,因为没有为硬链接分配独立的iNode,因为没有创建文件,所以,硬链接没有自己的属性集合和内容集合,使用的是他人的iNode。

建立硬链接的本质:在指定路径下,新增文件名和iNode编号的映射关系

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

./..均为硬链接

软链接

ln -s myfile.txt soft_file.link
264962 -rw-rw-r--  1 zhangsan zhangsan    0 Sep 30 03:16 myfile.txt
273922 lrwxrwxrwx  1 zhangsan zhangsan   10 Sep 30 03:17 soft_file.link -> myfile.txt

软链接有独立的iNode,可以被当做独立的文件看待。

软链接保存的是目标文件的路径。

软链接类似于快捷方式。

acm 

Access 最后访问时间 不是实时更新的

Modify 文件内容最后修改时间

Change 属性最后修改时间

内容修改后属性大概率也会发生变化

静态库与动态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库

链接时静态库的代码会被加载到程序中,故静态库必须用加载到内存

动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

生成静态库
[root@localhost linux]# ar -rc libmymath.a add.o sub.o 
ar是gnu归档工具,rc表示(replace and create)

生成动态库 

shared: 表示生成共享库格式

fPIC:产生位置无关码(position independent code)

库名规则:libxxx.so

ldd mymath

查看链接方式

动态库的加载:采用与位置无关码进行编址,在动态库中形成的函数以偏移量的形式保存其地址,链接时将偏移量链接到可执行程序中,加载时一旦动态库加载完成,并且动态库的起始地址确定

那么函数在地址空间中的位置即可确定。

gcc

-I

gcc -o mymath main.c -I ./mylib/include

通过-I指定头文件的位置

-L

通过-L指定库所在路径

gcc -o mymath main.c -I ./mylib/include -L ./mylib/lib

-l

通过-l指定库名称

gcc -o mymath main.c -I ./mylib/include -L ./mylib/lib -l mymath

提取库名称是需要去掉其前缀和后缀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值