linux程序如何支持插件
by czyhd on 七.27, 2009, under 程序设计
今天小猴同学在研究这个,我也看了下。
给两段代码
1,插件部分,so.c
int add( int a, int b){
return a+b;
}
编译
gcc -c -fPIC so.c
gcc -shared -fPIC so.o -o so.so
2,主程序部分,main.c
#include <stdio.h>
#include <dlfcn.h>
int (*add)(int x,int y);
int main(){
int a,b;
char so_filename[20]=”./so.so”;
void *p;
char *error;
p=dlopen(so_filename,RTLD_LAZY);
if (p==NULL){
fprintf(stderr,dlerror());
return 2;
}
add=dlsym(p,”add”);
error=dlerror();
if (error){
fprintf(stderr,error);
return 3;
}
scanf(“%d %d”,&a,&b);
printf(“%d+%d=%d.\n”,a,b,add(a,b));
dlclose(p);
return 0;
}
编译:
gcc main.c -ldl -o main
注意要加-ldl
源程序要包含dlfcn.h头,用dlopen装载插件,用dlsym来找到函数add的地址,然后调用就好
八月 21st, 2009 on 10:07
小侯童鞋管这个叫Dynamic load……
八月 23rd, 2009 on 21:01
十一月 25th, 2009 on 14:24
囧,我看标题以为是linux程序有统一的插件写法…
十一月 26th, 2009 on 22:35
呵呵,突然发现是有点歧义~