Linux 动静态库的制作,使用和加载
Linux 动静态库的制作,使用和加载
- 一.前置说明
-
- 1.mylib.h
- 2.mylib.c
- 3.mymath.h mymath.c
- 4.如何制作库
- 二.动静态库的制作
-
- 1.静态库的制作
-
- 1.制作
- 2.使用一下静态库,验证是否成功打包
- 2.动态库的制作
-
- 1.编译.c源文件文件生成.o目标文件
- 2.打包生成动态库
- 3.编写makefile文件,自动化制作动态库
- 4.使用一下动态库,验证是否成功打包
- 3.动态库的打包与发布
- 三.动态库的使用
-
- 1.下载压缩包并解压
- 2.使用动态库对main.c进行编译
- 1.安装动态库到系统当中
-
- 演示
- 验证
- 2.修改环境变量LD_LIBRARY_PATH
-
- 1.演示+验证
- 2.修改配置文件+验证
- 3.在/lib64/目录下面建立动态库的软链接文件
-
- 1.演示
- 2.验证
- 4.在/etc/ld.so.conf.d目录下添加.conf配置文件
-
- 1.演示
- 2.验证
- 小小建议
- 四.动静态库与动静态链接
-
- 1.先上结论
- 2.验证
-
- 1.修改makefile
- 2.同时提供动态库和静态库,gcc默认使用的是动态库
- 3.只提供静态库,不提供动态库
-
- 一个小问题
- 4.同时提供动态库和静态库,采用静态链接进行编译
- 5.只提供动态库还非要进行静态链接,那么就会发生链接报错
- 五.理解动态库的加载
-
- 1.站在系统的角度来进行理解
- 2.补充一下关于可执行程序的知识点
-
- 1.先说理论
- 1.验证可执行程序当中代码指令本身就有地址
- 2.Linux下逻辑地址等于虚拟地址
- 3.可执行程序的表头及其区域划分
- 4.CPU当中的程序计数器(pc指针/eip寄存器)
- 5.理顺可执行程序的执行过程
-
- 1.编译器进行编译生成可执行程序
- 2.OS根据可执行程序的信息创建进程PCB
- 3.CPU配合pc指针执行可执行程序的指令
- 6.重新理解进程地址空间
- 7.理解静态库的静态链接和加载问题
- 3.理解动态库动态链接和加载问题
-
- 1.理论
- 2.结论
关于动静态库的初步理解,我们在Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile
这篇博客中进行了详细介绍,大家可以去看一下
今天我们直接介绍动静态库的制作和使用,分别站在库的制作者和使用者的角度来分析
而我们要使用的文件就是我们在
Linux文件系列: 深入理解缓冲区和C标准库的简单模拟实现
这篇博客当中写的mylib.h mylib.c这几个文件
一.前置说明
1.mylib.h
#pragma once
#include
#include
#include
#include
#include
#include
#include
#include
#define SIZE 4096
#define DFL_MODE 0666
#define FLUSH_NONE 1
#define FLUSH_LINE (1<<1)
#define FLUSH_ALL (1<<2)
typedef struct my_file
{
int fileno;
char buffer[SIZE];
int end;//缓冲区中有效数据的个数(也就是最后一个有效数据的下一个位置)
int flag;//缓冲区的刷新策略
}my_file;
my_file* myfopen(const char* path,const char* mode);
int myfwrite(const char* s,int num,my_file* stream);
int myfflush(my_file* fp);
int myfclose(my_file* fp);
2.mylib.c
#include "mylib.h"
my_file* myfopen(const char* path,const char* mode)
{
int fd=0;
int flag=0;
if(strcmp(mode,"r")==0)
{
flag |= O_RDONLY;
}
else if(strcmp(mode,"w")==0)
{
flag |= (O_WRONLY | O_CREAT | O_TRUNC);
}
else if(strcmp(mode,"a")==0)
{