[英]Global variables in c library
有人如何确保某个c库(.a)的源代码是否使用全局变量? 是否有任何工具可以解析此类详细信息?
库由模块(编译的C文件)组成。 模块可以声明全局变量。 任何引用全局变量的模块(库内部或外部)都将导致声明全局变量的模块包含在您的构建中。
全局变量可以是static
。 然后,它仅在该模块中可见。
全局变量可以是extern
。 这意味着它在当前模块中不存在,并且根本不可能在库中存在,在这种情况下,用户必须提供变量。
在第一种和第三种情况下,该变量将在库的符号表或库的修订表中列出。 第一个是被叫方可用的符号列表; 第二个变量的列表,其确切地址在加载时仍必须固定。 可能有一些必须修正的变量没有导出。 符号始终包含名称,无需列出修补程序的名称。
因此,查看库的符号表的工具可能是可以回答您问题的工具。
注意:库的符号表中列出了全局变量,但这并不意味着该库中的任何函数都会使用该变量。
用手:
如果您已经知道如何打开.a文件,请查看它。
如果在文件中,则有:
使用变量时无需声明(因此在另一个文件中定义)
从每个函数中声明一个变量
因此,此文件包含全局变量。
通过工具:
每个编译器都为您提供此选项(我相信)
例如:
在GCC和GDB中,键入info variables
以列出所有全局变量。
使用VS,打开“ 类视图” ,找到全局函数和变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.