首页 > 代码库 > 动态链接库
动态链接库
1、生成动态库
1)、在编写调用动态库的程序的makefile文件时,需要加入编译选项-rdynamic和-ldl(只有这一个也可以?)。
例:编译选项如下:gcc -rdynamic -o main main.c -ldl
2)、在编写动态库 -fPIC -shared
例:编译选项如下:gcc -fPIC -shared caculate.c -o libcaculate.so
2、动态链接库的调用接口介绍
如果要使用一个动态库提供的函数,在windows下主要会用到这两个api函数LoadLibrary和GetProcAddress,而在linux下主要会用到这两个api函数dlopen和dlsym函数,需要包含dlfcn.h头文件。dlopen用于加载动态库,而dlsym用于获取符号地址,在成功获取到我们需要的解码函数。
#include <dlfcn.h>
void *dlopen(const char *filename, int flag);
char *dlerror(void); void *dlsym(void *handle, const char *symbol); int dlclose(void *handle);
dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,dlerror返回出现的错误,dlsym通过句柄和连接符名称获取函数名或者变量名,dlclose来卸载打开的库。 dlopen打开模式如下:
RTLD_LAZY 暂缓决定,等有需要时再解出符号
RTLD_NOW 立即决定,返回前解除所有未决定的符号。
3、动态链接库的调用接口介绍
1)、通过nm命令,导出so文件中的函数符号,例如:
nm -D *****.so
2)、通过c++filt命令,将函数符号转换为C++函数名
c++filt 符号名
动态链接库