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

问题描述:

我阅读了一些关于在其中加载共享库和调用函数的教程。我在两点都成功了。只有一件事我没有在任何教程中看到:如何从共享库函数获取返回值?

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

这是我的共享库来源:

#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)()); 

因此,任何想法?

谢谢。

+0

也许是因为这是一个静态字符串?你有没有尝试返回一个int? – Bort

它工作时lib_func正确声明:

char* (*lib_func)(); 

您可能需要在分配投从dlsym

+0

太棒了!感谢您的帮助! – Tectu