有没有办法从当前文件/模块中使用的外部变量发生链接的地方找到文件/共享对象。
例如:在 linux 的大型应用程序软件中,我想找到我在模块中外部的特定变量的声明...
提前致谢。
最佳答案
我不完全确定理解你的问题,但也许 dladdr应该适合你的需要。 dladdr
是 Gnu/Glibc 扩展。从它的手册:
dladdr()
函数接受一个函数指针并尝试解析它所在的名称和文件。(它很可能与指向全局变量的指针一起使用).
但是,我对您问题的措辞感到困惑。 “变量声明”在可执行 ELF 二进制文件或共享对象中没有意义,因为声明本质上是源代码概念,而不是目标代码概念。实际上,大多数(全局变量的)声明都在一些头文件中。
如果您有应用程序的源代码,您可以使用文本工具(如 grep
或 etags
),甚至可以通过插件或 MELT 扩展 GCC 编译器。扩展以查找此类声明。
当然,您也可以使用dlsym
找到某个符号的地址,给定它的名字。
关于c++ - 如何找到外部变量的链接路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001035/