在dlopen的()函數(shù)以指定模式打開指定的動態(tài)連接庫文件,并返回一個句柄給調(diào)用進(jìn)程。使用dlclose()來卸載打開的庫。
/***********************main.c的內(nèi)容**************************/
#include<stdio.h>
#include<dlfcn.h>
int main()
{
int a,b;
void *pHandle;
typedef int (*func)(int,int); //注意函數(shù)的定義,這里要根據(jù)下面的max函數(shù)格式定義。
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為大數(shù)。\n",a,b,(*func)(a,b));
dlclose(pHandle);
}
/***********************main.c的內(nèi)容**************************/
/***********************testmax.c的內(nèi)容**************************/
#include<stdio.h>
int max(int x,int y)
{
return x>y?x:y;
}
/***********************testmax.c的內(nèi)容**************************/
編譯:
gcc testmax.c -shared -fPIC -o testmax.so
gcc -o main -ldl main.c
運(yùn)行:
admin@admin-desktop:/abc/test$ ./main
2008 2012
2008與2012相比,2012為大數(shù)。