2012-01-25 18 views
1

有什麼方法可以從當前文件/模塊中使用的extern變量的鏈接發生位置查找文件/ shared_object。如何找到extern變量的鏈接路徑

例如:在Linux中大型應用程序sofware,我想找到我在我的模塊中已經externed特定變量的聲明...

在此先感謝。

回答

2

我不完全確定要理解您的問題,但也許dladdr應該適合您的需求。 dladdr是一個Gnu/Glibc擴展。從其手冊: 功能dladdr()採用函數指針並嘗試解析它所在的名稱和文件。(它很可能可以與指向全局變量的指針一起使用)。

但是,我對你的問題的措辭感到困惑。 「變量聲明」在可執行ELF二進制文件或共享對象內沒有意義,因爲聲明本質上是源代碼概念,而不是目標代碼。實際上,大多數(全局變量的)聲明都在一些頭文件中。

注意的C++ name mangling

如果您的應用程序的源代碼,你可以使用文字工具(如grepetags),甚至延長GCC編譯器通插件或擴展MELT找到這樣的聲明。

當然,您也可以使用dlsym來查找某個符號的地址,並給定其名稱。