C++ 有没有办法在两个共享对象之间使用相同的全局变量?
假设我有两个共享对象a.so和b.so 在我的另一个文件c.cc中,我有一个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()
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?我不知道,伙计-这就是我在这里的原因:)