基础I/O--软硬链接和动静态库

三:软硬链接

1.硬链接:让多个文件名对应同一个inode
创建file的硬链接文件:ln file name

这里写图片描述
这里写图片描述
2.软连接:有自己的inode,软连接创建的name文件放的是如何找到file(即放的是file的路径,相当于windows下的快捷方式)
创建file的软连接文件:ln -s file name
这里写图片描述
注:删除软链接和硬链接文件都不会影响源文件。

四:静态库和动态库

1.静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。
gcc这条命令用来将源代码生成可执行程序,下面来看一下gcc的常用选项。
1、无选项编译链接
例:命令:gcc test.c //会默认生成a.out可执行程序
2、-E: 进行预处理和编译,生成汇编文件。
命令:gcc -E test.c //会生成test.i文件
3、-S: 进行预处理,编译,汇编等步骤,生成“.s”文件
例:命令:gcc -S test.c //会生成test.s文件
4、-c: 会直接生成二进制目标文件
例:命令:gcc -c test.c //会生成test.o文件
5、-o :对生成的目标进行重命名
例:命令:gcc -o test test.c //会生成名字是test可执行文件而不是默认的a.out
2.生成静态库:
(1)创建函数以及对应的头文件
这里写图片描述
这里写图片描述
这里写图片描述
(2)gcc -c生成目标文件(.o文件)
这里写图片描述
(3)ar -rc libmymath.a add.o sub.o生成静态库
注:这里默认静态库名以.a结尾,前面加lib
ar -tv 用来查看静态库中的目录列表
这里写图片描述
(4)使用
假如一个外部文件要使用你的静态库,你只需要将静态库和头文件发给他就行。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3.动态库(.so):程序在运行的时候才去链接动态库代码,多个程序共享使用库的代码。
注:(1)一个动态链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。
(2)在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接。
(3)动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该动态库的所有进程共用,节省了内存和磁盘空间 。

4.生成动态库:
(1)创建函数以及对应的头文件
(2)gcc -fPIC -c
gcc -shared -o libmymath.so *.o 生成动态库
这里写图片描述
(3)运行动态库
方法一:拷贝.so文件到系统共享库路径下,一般只=指/usr/lib
方法二:更改LD_LIBRARY_PATH
这里写图片描述
这里写图片描述

-I:指定头文件目录
-L:指定库目录
-l(小L):后跟库名

猜你喜欢

转载自blog.csdn.net/virgofarm/article/details/80349250