linux库

一、静态库与动态库的区别

在Linux系统中,静态库(Static Library)和动态库(Dynamic Library)都是常见的软件库形式,用于存放已编译的代码和函数,供程序在运行时调用。它们之间有以下区别:

静态库:

- 静态库在编译时被链接到目标程序中,成为目标程序的一部分。链接过程将静态库的代码和数据复制到目标程序,使得目标程序在运行时不再依赖于该静态库的存在。
- 优点:静态库的主要优点是独立性强,嵌入到目标程序中,避免了对外部库的依赖。这种方式通常适用于小型应用程序,或者需要确保特定版本库的使用情况。
- 缺点:随着程序规模的增长,静态库可能导致目标程序过大,占用过多的磁盘空间。此外,如果多个程序使用同一个静态库,每个程序都会拷贝一份该库,造成资源浪费。

动态库:

- 动态库是一个单独的文件,与目标程序分离。在程序运行时,动态库通过动态链接器(如ld.so)加载到内存中,并与程序进行链接和解析。不同的程序可以共享同一份动态库,节约了磁盘空间和内存消耗。
- 优点:动态库的主要优点是节约系统资源,提高程序的共享性和可维护性。如果某个动态库更新,所有依赖该库的程序都可以受益于该更新,无需重新编译目标程序。
- 缺点:动态库的使用依赖于库的可用性和正确版本的安装。如果某个动态库在系统中缺失,或者版本不兼容,程序可能无法正常运行。

总结:
- 静态库在编译时被链接到目标程序中,独立存在,增加了目标程序的体积。
- 动态库在程序运行时加载,并与程序共享,节约空间但需要注意可用性和版本问题。
- 使用静态库时,程序与库的关系更紧密,而使用动态库时,程序与库的关系更松散。

在实际应用中,通常根据需求和具体情况选择使用静态库还是动态库。

二、静态库的制作与使用

静态库的格式:libhello.a

步骤:

gcc hello.c -c                           //生成hello.o

ar rcs libhello.a hello.o            //将hello.o生成静态库libhello.a

使用(掐头去尾,把前面的lib和后面的后缀.a去掉):

编译时:gcc 主程序.c -lhello -L ./

-L ./的作用:优先从当前路径寻找库,再去默认库路径寻找

三、动态库的制作与使用

动态库格式:与静态库类似,前缀为“lib”,后缀变为“.so”,libhello.so

步骤:

gcc -shared -fpic hello.c -o libhello.so

使用:

先将libhello.so拷贝到 /usr/lib/

编译:gcc 主程序.c -lhello -L ./

你可能感兴趣的:(linux,linux,运维,服务器)