本文主要探讨Linux下动态链接库的创建与使用。
 一. 创建
       下面举一个例子:
       /*
          add.h
       */
       #ifndef _ADD_H
       #define _ADD_H
       #ifdef SHARED
       int  (* addnum)(int a, int b);
       #endif
       #endif
       /*
         addnum.c
       */
       #include "add.h"
       #include 
       int addnum(int a,int b){
               int c=a+b;
               return c;
       }
       然后用gcc将这两个文件编译成动态链接库.so文件。
          gcc -c add.h addnum.c
          gcc -shared -o addnum.so addnum.o
       这样就生成了动态链接库addnum.so文件
 二. 使用动态链接库
      /*        main.c           */
      #include 
      #include 
      #define SOFILE "./addnum.so"
      #define SHARED
       int main(){
             printf("Open Dynamic Lib!\n");
             void *dp=dlopen(SOFILE,RTLD_LAZY);
             int (*addnum)(int,int);
             if(NULL==dp){
                      printf("Open Dynamic Lib Failed!\n");
                      return -1;
             }
             addnum=dlsym(dp,"addnum");
             int a=10,b=20;
             int c=addnum(a,b);
             printf("The sum is : %d\n",c);
             dlclose(dp);
             return 1;
        }
        用如下的命令编译:
           gcc main.c -ldl -o main
        然后运行:
           ./main
        结果是:
           The Sum is :30
        但是,如果定义成C++文件,上述方法在使用时可能会出问题,此时需要强制类型转换.
            addnum=(int (*)(int,int))dlsym(dp,"addnum")
没有评论:
发表评论