通过 ls -i 文件名 我们还会发现,test 和 mytest-h的inode编号是一样的。
通过ls -i -l
命令我们可以看到,软链接文件的inode号与源文件的inode号是不同的,并且软链接文件的大小比源文件的大小要小得多。
总结:
软连接就好比windows下的快捷方式,当软件删除后,快捷方式就没用了,同理软连接在源文件删除后也无法使用,但硬链接文件大小和源文件是一样的,删除文件在某方面来说就是将硬链接数减少,彻底删除就是将硬链接数置为0。
优点:使用静态库生成可执行程序后,该可执行程序就可以独自运行,不再需要库了。
缺点:使用静态库生成可执行程序会占用大量空间,特别是当有多个静态程序同时加载而这些静态程序使用的都是相同的库,这时在内存当中就会存在大量的重复代码。
动态库:
优点:节省磁盘空间,且多个用到相同动态库的程序同时运行时,库文件会通过进程地址空间进行共享,内存当中不会存在重复代码。
缺点:必须依赖动态库,否则无法运行
生成静态库
- #pragma once
- #include
- extern void mydate(int x, int y);
Date.c
- #include "Date.h"
-
- void my_sub(int x, int y)
- {
- printf(" %d月 %d 日\n");
- }
- #pragma once
- #include
- extern void my_log(char*str);
- #include "Log.h"
-
- void my_log(char*str)
- {
- printf("%s",str);
- }
- mylib=libcal.a
- CC=gcc
- $(mylib):Date.o Log.o
- ar -rc -o $(mylib) $^
- %.o:%.c
- $(CC) -c $<
-
- .PHONY:clean
- clean:
- rm -f $(mylib) ./*.o
-
- .PHONY:output
- output:
- mkdir -p Datelib/include
- mkdir -p Datelib/lib
- cp ./*.h Datelib/include
- cp ./*.a Datelib/include
动态库和静态库是两种常用的库文件形式,它们都是用于存储和管理可重用的代码的。下面我将分别介绍它们的使用。