Linux库的创建和使用

Linux库的概念

库是一种软件组建技术,里面封装了数据和函数,提供给用户程序调用。使用库可以使程序模块化,提高编译速度,实现代码重用,易于升级。Windows系统提供了大量静态链接库(.lib)和动态链接库(.dll)文件。在Linux中,库文件放在/usr/lib或/lib目录下,Linux库文件名由前缀lib,库名以及后缀三部分组成,动态库以.so作为后缀,静态库以.a作为后缀。


静态库的特点

静态库的代码在编译时就拷贝到程序中,多个程序同时引用一个静态库函数时,内存中将会有调用函数的多个副本。静态库节省编译时间,但是导致代码量膨胀。优点是编译后的执行程序不需要外部函数库支持,但是如果静态函数库改变了,程序需要重新编译。
静态库的创建和使用
步骤:

  1. 在一个头文件中声明静态库所导出的函数。
  2. 在一个源文件中实现静态库所导出的函数。
  3. 编译源文件,生成可执行代码。
  4. 将可执行代码所在的目标文件加入到某个静态库中,并将静态库拷贝到系统默认存放库文件的目录下。(如果不拷贝则需要用命令行选项指定库文件所在目录)
    实例:
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
     
     
/* mylib.h */
#ifndef _MYLIB_H
#define _MYLIB_H
void welcome();
void print_string( const char *str);
#endif
/* mylib.c */
#include "mylib.h"
#include <stdio.h>
void welcome()
{
printf( "Welcome to libmylib\n");
}
void print_string( const char *str)
{
if (str != NULL)
printf( "%s\n", str);
}

编译mylib.c生成目标文件:
gcc -o mylib.o -c mylib.c
将目标文件加入到静态库中,静态库为libmylib.a
ar rcs libmylib.a mylib.o
rcs命令行是选项,含义请参考man手册
将静态库拷贝到Linux的库目录/usr/lib或/lib下:
cp libmylib.a /usr/lib/libmylib.a

     
     
1
2
3
4
5
6
7
8
9
     
     
/* test.c */
#include "mylib.h"
#include <stdio.h>
int main( void)
{
welcome();
print_string( "It's successful");
return 0;
}

编译并且执行:
gcc -o test test.c -lmylib
-l为选项,mylib是库名,省略前后缀
./test
如果前面没有拷贝到Linux的库目录,需要指定静态库文件的路径
gcc -o test test.c -L. -lmylib
-L.表示库文件在当前路径。
更多ar命令请参考man ar手册。


动态库的特点

动态库在程序开始运行后调用库函数时才被载入,被调函数在内存中只有一个副本,且可以在程序运行期间释放动态库所占的内存。目前Linux中使用动态库居多,因为升级方便。
动态库的创建和使用
把mylib.c创建成动态库的命令:
gcc -fPIC -o mylib.o -c mylib.c
gcc -shared -o mylib.so mylib.o
或者
gcc -fPIC -shared -o mylib.so mylib.c
使用动态库:
gcc -o test test.c ./mylib.so
./test
另一种方法是通过调用系统函数使用动态链接库,具体参考
void* dlopen(const char *filename, int flag)系列函数。


参考

《Linux C编程实战》,添加部分内容,修改了部分代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PegasusWang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值