假设我有两个共享对象a.so和b.so。
在我的另一个文件c.cc中,我有int x = 0;
当x在a.so中递增时,我希望它反映在b.so。
中这可能吗? 谢谢!
答案 0 :(得分:2)
是的,你可以:
<强> 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
文件中,但这不会链接器或运行时的差异。
(请注意,我在main
中编写了c.cc
函数以简化操作,但导致c
与每个a
和{{1}之间存在周期性依赖关系通常你有一个更清晰的依赖图,可能让b
和a
都依赖b
,但c
函数放在main
中}。)