【Linux系统】动静态库的创建和链接使用




在这里插入图片描述



什么是库?

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。

本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:

  • 静态库 .a[Linux]、.lib[windows]
  • 动态库 .so[Linux]、.dll[windows]



静态库创建与链接使用


1、静态库创建步骤

(1)在当前目录下写好自己库的 .c / .h 文件

在这里插入图片描述


(2)将 .c 文件编译成 .o 文件
gcc -c my_stdio.c
gcc -c my_string.c

在这里插入图片描述


(3)创建静态库文件 .a
ar -rc libmylib.a file1.o file2.o file3.o

ar 命令在 Unix 和类 Unix 系统中用于创建、修改和提取静态库文件(.a 文件)。静态库文件是一种包含多个目标文件(.o 文件)的归档文件,通常用于编译和链接过程中。

ar 命令即为 archive,在软件开发的上下文中,它通常是指这种将多个文件合并成一个文件的过程或结果,旨在便于存储、传输或使用。而在使用 ar 工具时,你实际上是在创建一种特殊的归档文件——静态库,这个库可以在编译其他程序时被链接进去。



ar 命令的常用选项包括:

  • -rreplace 替换或插入文件。如果静态库中已经存在同名的文件,则替换它;如果不存在,则插入新文件。
  • -ccreate 创建新的静态库文件。如果静态库文件已经存在,则不会报错,而是覆盖原有的文件。

静态库文件的一般写法

规定文件名需要以 lib 开头,以.a 作为后缀,当然后缀可以继续添加一些数字作为版本号

libmylib.a.1.2



静态库的本质是把所有的 .o 文件打包在一起,意味着该静态库文件中可能包含着很多 .o 文件。


ar -rc libmystdio.a my_stdio.o my_string.o

在这里插入图片描述

如果需要让用户使用你编写的库,只需将头文件和库文件给用户即可,无需给源文件



2、静态库的链接使用

(1)把头文件和库安装到系统

安装的本质其实就是拷贝!


  • 将头文件安装到 /usr/include/
sudo cp *.h /usr/include/

查询已安装成功

在这里插入图片描述


  • 将自己的库安装到 /lib64/
sudo cp libmystdio.a /lib64/

查询已安装成功

在这里插入图片描述



(2)使用自己的库

写一个 main.c 试验一下自己写的库

#include<my_stdio.h>
#include<my_string.h>
#include<stdio.h> // 因为要使用 printf

int main()
{
	const char* str = "hello Linux";
	printf("%s : %d\n", str, mystrlen(str));


	mFILE* mf = mfopen("./log.txt", "w");


	mfwrite(str, mystrlen(str), mf);

	
	mfclose(mf);

	return 0;
}



链接第三方库 -l

但是 gcc 编译时,报错了,静态库报错属于链接报错

gcc -o test main.c

在这里插入图片描述


实际上,我们系统的库一般都在系统目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值