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

时间:2018-05-13 10:44:48

标签: c++

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

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

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

这可能吗? 谢谢!

1 个答案:

答案 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}之间存在周期性依赖关系通常你有一个更清晰的依赖图,可能让ba都依赖b,但c函数放在main中}。)