本文主要探讨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")
没有评论:
发表评论