如何从共享库函数中获取返回值?

时间:2011-11-16 10:51:15

标签: c return shared

我阅读了一些关于加载共享库和调用函数的教程。我在这两点上都取得了成功。我在任何教程中都没有看到过一件事:

如何将共享库中函数的值返回到主代码?

这是我的共享库源:

#include <stdio.h>

char* entry(){
  printf("this is a working plugin\n");

  return "here we go!";
}

当我调用它时,我在stdout上得到“这是一个有效的插件”。我现在的问题是,如何将“here we going”字符串返回到main.c,看起来像:

void *lib_handle;
void (*lib_func)();

...

lib_handle = dlopen("/home/tectu/projects/tibbers/plugins.so", RTLD_LAZY);
if(!lib_handle)
  error("coudln't load plugins", NULL);

lib_func = dlsym(lib_handle, "entry");
  if(!lib_func)
    error("coudln't find symbol in plugin library", NULL);

(*lib_func)();  // here i call the entry() from the .so

这样的事情不起作用:

printf("return value: %s\n, (*lib_func)());

那么,有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

正确声明lib_func后,它可以正常工作:

char* (*lib_func)();

您可能需要从dlsym投射作业。