繁体   English   中英

C库中的全局变量

[英]Global variables in c library

有人如何确保某个c库(.a)的源代码是否使用全局变量? 是否有任何工具可以解析此类详细信息?

库由模块(编译的C文件)组成。 模块可以声明全局变量。 任何引用全局变量的模块(库内部或外部)都将导致声明全局变量的模块包含在您的构建中。

全局变量可以是static 然后,它仅在该模块中可见。

全局变量可以是extern 这意味着它在当前模块中不存在,并且根本不可能在库中存在,在这种情况下,用户必须提供变量。

在第一种和第三种情况下,该变量将在库的符号表或库的修订表中列出。 第一个是被叫方可用的符号列表; 第二个变量的列表,其确切地址在加载时仍必须固定。 可能有一些必须修正的变量没有导出。 符号始终包含名称,无需列出修补程序的名称。

因此,查看库的符号表的工具可能是可以回答您问题的工具。

注意:库的符号表中列出了全局变量,但这并不意味着该库中的任何函数都会使用该变量。

用手:

如果您已经知道如何打开.a文件,请查看它。

如果在文件中,则有:

  • 使用变量时无需声明(因此在另一个文件中定义)

  • 从每个函数中声明一个变量

因此,此文件包含全局变量。

通过工具:

每个编译器都为您提供此选项(我相信)

例如:

在GCC和GDB中,键入info variables以列出所有全局变量。

使用VS,打开“ 类视图” ,找到全局函数和变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM