/***********************main.c的内容**************************/
#include<stdio.h>
#include<dlfcn.h>
int main()
{
int a,b;
void *pHandle;
typedef int (*func)(int,int); //注意函数的定义,这里要根据下面的max函数格式定义。
scanf("%d%d",&a,&b);
pHandle=dlopen("./dl2.so",RTLD_NOW);
if (!pHandle)
{
cerr << "Cannot open library: " << dlerror() << ' ';
return 1;
}
func=(func)dlsym(pHandle,"max");
const char *dlsym_error = dlerror();
if (dlsym_error) {
cerr << "Cannot load symbol 'baidu': " << dlsym_error <<' ';
dlclose(pHandle);
return 1;
}
printf("%d与%d相比,%d为大数。\n",a,b,(*func)(a,b));
dlclose(pHandle);
}
/***********************main.c的内容**************************/
/***********************testmax.c的内容**************************/
#include<stdio.h>
int max(int x,int y)
{
return x>y?x:y;
}
/***********************testmax.c的内容**************************/
编译:
gcc testmax.c -shared -fPIC -o testmax.so
gcc -o main -ldl main.c
运行:
admin@admin-desktop:/abc/test$ ./main
2008 2012
2008与2012相比,2012为大数。