天天看点

Linux动态链接库的使用

1、前言

2、动态链接库生产

  动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fpic编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接库,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接库。

程序代码如下:

Linux动态链接库的使用
Linux动态链接库的使用
Linux动态链接库的使用
Linux动态链接库的使用

编译生产libcac.so文件如下: gcc -shared -fpic caculate.c -o libcac.so

编写一个测试程序调用此动态链接库的函数,程序如下所示:

Linux动态链接库的使用
Linux动态链接库的使用

编译生产可执行文件main如下:gcc main.c -o main -l ./ -lcac   (其中-l指明动态链接库的路径,-l后是链接库的名称,省略lib)

程序执行结果如下所示:

Linux动态链接库的使用

 3、获取动态链接库的函数

  linux提供dlopen、dlsym、dlerror和dlcolose函数获取动态链接库的函数。通过这个四个函数可以实现一个插件程序,方便程序的扩展和维护。函数格式如下所示:

Linux动态链接库的使用
Linux动态链接库的使用

dlopen()是一个强大的库函数。该函数将打开一个新库,并把它装入内存。该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的。写个测试程序调用上面生产libcac.so库如下所示:

Linux动态链接库的使用
Linux动态链接库的使用

程序执行结果如下所示:gcc call_main.c -o call_main -ldl

Linux动态链接库的使用

继续阅读