硬链接与软链接的简单了解,静态库与动态库的生成

硬链接与软链接

硬链接
这里写图片描述
第3列的数叫硬链接数(有几个文件名对应着同一个inode,就叫硬链接数为几)这里写图片描述
这里写图片描述
当前目录.的inode和上一级目录home下的admin是一样的

文件的硬链接创建方式:ln src dst
硬链接好处:两个文件名指向同一个索引号,指向的数据是一样的,此时day10.TXT不小!心被删掉了,引用计数(硬链接数)减少1(此时不为0),系统便知道还有文件指向这些数据,便不会把它删掉,所以它还在。
软链接
用ln -s 命令可以生成一个软链接,如下:
[root@linux236 test]# ln -s source_file softlink_file
*静态库
静态库:将所有的.o文件打包
生成静态库的步骤:
1.写源文件,通过 gcc -c xxx.c 生成目标文件。
2.用 ar 归档目标文件(ar -rc lib**.a add.o sub.o),生成静态库。
3.配合静态库,写一个使用静态库中函数的头文件。
4.使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。
在测试静态库时,编译main.c :
gcc main.c -L. -l**(库名)
上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -l** 告诉 gcc 生成可执行程序时要链接 lib**.a

我写了两个加法减法函数的源文件,整个生成静态库的过程如下
这里写图片描述
在运行时可以把静态库删掉,链接时已经把代码放到了a.out里
动态库
Windows下,一般称为动态库。Linux下一般称为共享库。
动态库:节省物理内存空间
此处扩展一下:动态库是可执行的文件.elf,静态库是不可执行的.
linux中的四种ELF:
.o
core(程序崩掉时产生core文件)
.so
可执行程序
制作动态库 xxx(库名libxxx.so (库文件名)
gcc –fPIC –shared –o libxxx.so (库文件名) *.c
编译
gcc main.c –L. –lxxx(库名)
这里写图片描述
此时执行a.out时会出问题,编译连接可以正常进行,但是在运行时出现如“error while loading shared libraries: libxx.so.1:cannot open shared object file :No such file or directory”的错误提示。
  原因是Linux下的共享库路径配置不正确。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录),若共享库不在这两个路径,不能自动连接到。大家可以参考一下这篇文章有很详细的解决方法linux下添加动态链接库路径的方法,共享库路径正确配置后,再执行a.out,就可以运行出正确结果了。
  笔者水平有限,文章不足之处,欢迎大家批评指正。

猜你喜欢

转载自blog.csdn.net/jennifer1_/article/details/81150932