【Linux后端服务器开发】软硬链接与动静态库

目录

一、软硬链接

二、动静态库

1. 静态库

2. 动态库


一、软硬链接

软链接:ln -s myfile soft_file.link

硬链接:ln myfile hard_file.link

【Linux后端服务器开发】软硬链接与动静态库_第1张图片

【Linux后端服务器开发】软硬链接与动静态库_第2张图片

查看映射关系:ll -li

【Linux后端服务器开发】软硬链接与动静态库_第3张图片

软硬链接区别:是否具有独立的inode

  • 软链接具有独立的inode:可以当作独立文件
  • 硬链接没有独立的inide:没有创建新文件

硬链接使用的是别人的inode和内容,就是在指定的路径下新增文件名和inode编号映射关系

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

新建文件的默认硬链接数为1,新建目录的默认硬链接数为0

软链接可视作快捷方式

【Linux后端服务器开发】软硬链接与动静态库_第4张图片

二、动静态库

静态库:.a

动态库:.so

库:将 .o 文件链接之后的库文件和对应的 .h 文件进行打包

编译链接库:gcc -o 可执行文件 源文件 -I 库对应的头文件路径 -L 库的路径 -l 库名(去除前后缀)

                                                         (Include)                      (Lib)

安装:本质是拷贝,将程序的库和相关头文件拷贝到系统对应的路径下

  • sudo cp 第三方库对应的头文件 系统头文件路径(/usr/include)
  • sudo cp 第三方库系统路径库(/lib64)

动态库:

  • .c 文件用gcc汇编成 .o 文件时,加上 -fPIC(与位置无关码)
  • 链接 .o 文件时加上 -shared ,表示形成的不是可执行文件,而是动态库

编译链接完成后,告诉OS和shell动态库位置:

  1. 和静态库类似,将 .h 文件和 .so 文件复制到系统路径下
  2. 添加环境变量,但系统重启后失效
  3. 配置 /etc/ld.so.conf.d 文件,在此目录下创建一个 *.conf 文件,将第三方动态库的路径写入该文件,然后在该文件目录用idconfig 更新设置
  4. 建立软链接,在当前路径或者系统路径下创建动态库的软链接,系统默认路径是当前路径和系统库路径

使用第三方库:

  • 安装第三方库
  • 编译的时候加上库名

gcc默认是动态链接(建议行为),对一个特定的库,究竟是静态还是动态,取决于库本身是静态还是动态

1. 静态库

原理:将库代码拷贝到代码区

库编写者writer

libmymath.a: add.o sub.o
    ar -rc $@ $^
add.o: add.c
    gcc -c add.c
sub.o: sub.c
    gcc -c sub.c

.PHONY:output
output:
    mkdir -p mylib/include
    mkdir -p mylib/lib
    cp -f *.h mylib/include
    cp -f *.a mylib/lib

.PHONY:clean
clean:
    rm -rf *.o libmymath.a

用户user

【Linux后端服务器开发】软硬链接与动静态库_第5张图片

交付库(安装)

【Linux后端服务器开发】软硬链接与动静态库_第6张图片

编译链接库

【Linux后端服务器开发】软硬链接与动静态库_第7张图片

安装

【Linux后端服务器开发】软硬链接与动静态库_第8张图片

注:不建议将测试代码、测试库直接放入系统库中

2. 动态库

原理:指定函数的地址,写入到可执行程序中

库编写者write

libmymath.so: add.o sub.o
    gcc -shared -o $@ $^
add.o: add.c
    gcc -c -fPIC add.c
sub.o: sub.c
    gcc -c -fPIC sub.c

.PHONY:output
output:
    mkdir -p mylib/include
    mkdir -p mylib/lib
    cp -f *.h mylib/include
    cp -f *.so mylib/lib

.PHONY:clean
clean:
    rm -rf *.o libmymath.so mylib

【Linux后端服务器开发】软硬链接与动静态库_第9张图片

【Linux后端服务器开发】软硬链接与动静态库_第10张图片

用户user

【Linux后端服务器开发】软硬链接与动静态库_第11张图片

告诉OS和shell动态库位置

方案一:安装,类似静态库(略)

方案二:添加环境变量,重启中断之后失效

【Linux后端服务器开发】软硬链接与动静态库_第12张图片

方案三:配置 /etc/ld.so.conf.d 文件,永久有效

【Linux后端服务器开发】软硬链接与动静态库_第13张图片

方案四:建立软链接,永久有效

【Linux后端服务器开发】软硬链接与动静态库_第14张图片

你可能感兴趣的:(Linux后端服务器开发,linux,服务器,软硬链接,动静态库)