我阅读了一些关于加载共享库和调用函数的教程。我在这两点上都取得了成功。我在任何教程中都没有看到过一件事:
如何将共享库中函数的值返回到主代码?
这是我的共享库源:
#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)());
那么,有什么想法吗?
谢谢。
答案 0 :(得分:4)
正确声明lib_func
后,它可以正常工作:
char* (*lib_func)();
您可能需要从dlsym
投射作业。