2011-08-29 84 views
0

我有我想写的代码,我有一个void函数,信息。如何调用外部函数?

void info(char *,char *); 

这,我想从我的主要功能在一个单独的文件中调用。我想用dlopen打开这样的文件。我将如何调用函数:info。从我的其他文件?

我试图使用

info("testing: ","Success"); 

我对我的信息功能得到一个未定义的引用错误。

+1

“未定义的参考”是链接错误,不是编译错误。重新阅读编译和链接的基础知识,仔细检查如何链接所有翻译单元。 –

+0

该函数的签名不能提供足够的信息来说明如何调用它。但是,如果您不知道该功能的要求,那么您不应该使用它。所以解决办法是,不要。 –

回答

1

通常的路径是这样的:

/* Set up a typedef for the function pointer to make the code nicer */ 
tyepdef void(*Info_ptr)(char*, char*); 
/* Get the function, lib must be the dlopened library.*/ 
Info_ptr info; 
info = (Info_ptr)dlsym(lib, "info"); 
/* Use the function pointer */  
(*info)("testing: ", "Success"); 

以人OOK这里的土特:http://tldp.org/HOWTO/html_single/C++-dlopen/

+0

我发现现在它的名字'undefined symbol:info' –

+0

检查你的.so以确保你已经得到了你期望的符号。 YOu可以使用'nm'来帮助你。如果你的'info'函数也是C++,那么你需要像本教程中那样使用'extern“C”'来设置它。 –

+0

非常感谢,它帮助我分配了一次,我修复了功能信息。 –