用dlopen系列的函数可以实现像插件运行时加载的功能,下面的程序大致说明其用法,编译时加上-ldl链接动态库libdl.so。lighttpd的插件加载就是通过dlopen实现的,详见lighttpd源码文件plugin.c。
#include
#include
int main(int argc, char **argv)
{
void *handle;
double (*pow)(double, double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle)
{
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
pow = dlsym(handle, "pow");
if ((error = dlerror()) != NULL)
{
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*pow)(2, 2));
dlclose(handle);
return 0;
}
阅读(2234) | 评论(2) | 转发(1) |