有没有办法在两个共享对象之间使用相同的全局变量?



假设我有两个共享对象 a.so 和 b.so。

在我的另一个文件 c.cc 中,我有一个int x = 0;

当 x 递增时 a.so 我希望这反映在 b.so 中。

这可能吗? 谢谢!

是的,您可以:

a.cc

extern int x;
void incrementX() {
x++;
}

b.cc

#include <iostream>
extern int x;
void printX() {
std::cout << x << 'n';
}

c.cc

void incrementX();
void printX();
int x = 0;
int main() {
incrementX();
printX();
incrementX();
printX();
incrementX();
printX();
}

然后编译、链接并运行:

$ clang++ -Wall -shared -oa.so a.cc
$ clang++ -Wall -shared -ob.so b.cc
$ clang++ -Wall -oc ./a.so ./b.so c.cc
$ ./c
1
2
3

您可能希望将声明(extern int x;void incrementX();void printX();(放在标头中而不是*.cc文件中,但这对链接器或运行时没有影响。

(请注意,我用c.cc编写了我的main函数以保持简单,但导致cab之间的循环依赖关系。通常你会有一个更干净的依赖关系图,可能是通过ab都依赖于c,但把main函数放在d

最新更新