• 动态链接库


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

     
  • 相关阅读:
    git和github入门指南(3.1)
    git和github入门指南(2.2)
    git和github入门指南(2.1)
    git和github入门指南(1)
    webpack入门进阶(3)
    webpack入门进阶(2)
    webpack入门进阶(1)
    vue全家桶(4.3)
    vue全家桶(4.2)
    vue全家桶(4.1)
  • 原文地址:https://www.cnblogs.com/meiguhuaxian/p/6682700.html
Copyright © 2020-2023  润新知