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

C++ 有没有办法在两个共享对象之间使用相同的全局变量?,c++,C++,假设我有两个共享对象a.so和b.so 在我的另一个文件c.cc中,我有一个intx=0 当x在a中递增时,我想在b中反映出来 这可能吗? 谢谢大家! 是的,您可以: a.cc extern int x; void incrementX() { x++; } #include <iostream> extern int x; void printX() { std::cout << x << '\n'; } void incrementX()

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

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

当x在a中递增时,我想在b中反映出来

这可能吗? 谢谢大家!

是的,您可以:

a.cc

extern int x;

void incrementX() {
  x++;
}
#include <iostream>

extern int x;

void printX() {
  std::cout << x << '\n';
}
void incrementX();
void printX();

int x = 0;

int main() {
  incrementX();
  printX();
  incrementX();
  printX();
  incrementX();
  printX();
}
b.cc

extern int x;

void incrementX() {
  x++;
}
#include <iostream>

extern int x;

void printX() {
  std::cout << x << '\n';
}
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
a.so
如何修改
x
如果它是在
c.cc
中定义的?我在想使用extern int x;从c.h?我不知道,伙计-这就是我在这里的原因:)