首页 > 代码库 > 动态链接库

动态链接库

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 符号名

 

动态链接库