Linux.11_动静态库

Linux.11_动静态库

一、inode

inode是一个数据结构,本质是结构体,用来存放文件的许多信息。
Linux.11_动静态库_第1张图片
Linux.11_动静态库_第2张图片
创建一个新文件主要有一下4个操作:

  1. 存储属性
    内核先找到一个空闲的节点(例如123456)。内核把文件信息记录到其中。
  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
  3. 记录分配情况
    文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
  4. 添加文件名到目录
    新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(123456,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

二、理解软硬链接

1.概念

软链接:具有独立的inode,是一个独立的文件(eg:快捷方式)
硬链接:和指向的文件共享同一个inode,不是一个独立的文件

2.区别:

  1. 软链接创建时间与源文件不一样,硬链接创建时间与源文件一样
  2. 软链接可以跨分区,硬链接不能
  3. 原始文件删除后,软链接不可以访问,硬链接可以访问

三、动、静态库

Linux.11_动静态库_第3张图片
生成动态库:

gcc -shared -o $@ $^
//eg:gcc -shared -o libmymath.so myadd.o mysub.o

1.静态链接库的优点

(1) 代码装载速度快,执行速度略比动态链接库快;

(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。
(3) 静态链接的可执行程序体积大(不是库)

2.动态链接库的优点

(1) 更加节省内存并减少页面交换;

(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
(5)动态链接的可执行程序体积小(不是库)

3.不足之处

(1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

(2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

补充

库文件的链接可以使用-L选项指定所在路径,使用-l命令链接指定的库文件(库名)

你可能感兴趣的:(linux,linux,操作系统,新星计划)