2017-05-24 115 views
0

我使用dlopen()加載.so庫。圖書館撥打myfunc()。該功能可用於裝載機的版本1.0。所以致電myfunc()作品。然而,在版本0.9中,沒有myfunc(),並且libdl顯示關於延遲綁定失敗的錯誤。檢查符號是否可用,以防止dlopen懶惰綁定失敗

我可以在so.庫內檢查是否存在myfunc(),然後才調用函數?該函數不是必需的,不重要,如果loader的版本號爲0.9或更低,我可以安全地跳過它。

回答

0

在和ELF平臺,可以使用弱懸而未決的參考實現自己的目標:

// libfoo.c 
extern int myfunc() __attribute__((weak)); 
int foo() 
{ 
    if (&myfunc == NULL) { 
    printf("myfunc is not defined\n"); 
    } else { 
    // myfunc is available, call it 
    printf ("myfunc returns %d\n", myfunc()); 
    } 
} 
相關問題