假设我有两个共享对象 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
函数以保持简单,但导致c
与a
和b
之间的循环依赖关系。通常你会有一个更干净的依赖关系图,可能是通过a
和b
都依赖于c
,但把main
函数放在d
。