【发布时间】: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 吗?