我的问题是关于在共享库(让我们称这个库为“S”)内部创建的静态变量 (static void*),但它是一个内部变量,未在外部显示,但 API 的每次调用都依赖于它。现在让我们考虑一个案例,当一个程序(我们称它为主程序)链接到另外两个共享库,并且每个共享库都链接到库 S。现在我们的主程序的这个静态变量会发生什么?它有一个实例吗?两个?
最佳答案
Suma 的回答是正确的。静态变量只有一个实例。这也是为什么在共享库中使用静态全局变量会是一个大问题。一个可能发生这种情况的真实示例:
- Apache 加载以下模块的网络服务器:
- mod_php 链接到
- libxml2
- mod_perl 加载
- libxml2
- mod_php 链接到
现在,如果某些 PHP 代码修改了全局设置,例如 libxml2 中的解析器选项,Perl 代码也会看到这些更改。这可能会导致极难诊断的错误。因此,您应该不惜一切代价避免共享库中的全局状态。
(如今,使用 libxml2,您可以在本地进行大部分设置。)
关于c - 共享库中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21983684/