【问题标题】:How do I get a return value from a shared library function?如何从共享库函数中获取返回值?
【发布时间】:2011-11-16 10:51:15
【问题描述】:

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

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

这是我的共享库源:

#include <stdio.h>

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

  return "here we go!";
}

当我调用它时,我在标准输出上得到“这是一个工作插件”。我现在的问题是,如何将“我们开始”字符串返回到 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)());

那么,有什么想法吗?

谢谢。

【问题讨论】:

  • 可能是因为这是一个静态字符串?你试过返回一个 int 吗?

标签: c return shared


【解决方案1】:

当lib_func 被正确声明时它可以工作:

char* (*lib_func)();

您可能需要从dlsym 提交作业。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多