当前位置: 技术问答>linux和unix
动态加载动态库问题--在线等
来源: 互联网 发布时间:2015-09-29
本文导语: 我用的是CC 建立了一个动态库mylib.so 头文件是mylib.h 有没有方法在程序里动态加载这个动态库 该怎么做呀,请高手指教 | //给你个例子:sotest.c //cc -o sotest sotest.c -ldl #include #include void* slib=0; void...
我用的是CC
建立了一个动态库mylib.so 头文件是mylib.h
有没有方法在程序里动态加载这个动态库
该怎么做呀,请高手指教
建立了一个动态库mylib.so 头文件是mylib.h
有没有方法在程序里动态加载这个动态库
该怎么做呀,请高手指教
|
//给你个例子:sotest.c
//cc -o sotest sotest.c -ldl
#include
#include
void* slib=0;
void (*test) ();
const char* hError;
main()
{
slib=dlopen("libmylib.so",RTLD_LAZY);
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
test=dlsym(slib,"test");
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
test(); //执行so里面的函数
dlclose(slib);
if (hError)
{
printf("dlclose Error!n");
return;
}
}
return;
}
//cc -o sotest sotest.c -ldl
#include
#include
void* slib=0;
void (*test) ();
const char* hError;
main()
{
slib=dlopen("libmylib.so",RTLD_LAZY);
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
test=dlsym(slib,"test");
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
test(); //执行so里面的函数
dlclose(slib);
if (hError)
{
printf("dlclose Error!n");
return;
}
}
return;
}
|
void *dlopen(const char *pathname, int mode)
void *dlsym(void *handle, const char *name)
int dlclose(void *handle)
void *dlsym(void *handle, const char *name)
int dlclose(void *handle)
|
void *dlopen(const char *filename, int flag);
filename是库的路径和库名mode是加载方式
const char *dlerror(void);
测试加载函数时是否发生的错误
void *dlsym(void *handle, char *symbol);
dlsym加载动态库中的函数,symbol是要加载的函数名,返回的是指向函数symbol的指针
通过该返回值调用加载的函数。
int dlclose(void *handle);
关闭动态库
filename是库的路径和库名mode是加载方式
const char *dlerror(void);
测试加载函数时是否发生的错误
void *dlsym(void *handle, char *symbol);
dlsym加载动态库中的函数,symbol是要加载的函数名,返回的是指向函数symbol的指针
通过该返回值调用加载的函数。
int dlclose(void *handle);
关闭动态库