2011-08-29 82 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

非常感謝,它幫助我分配了一次,我修復了功能信息。 –