有没有办法在两个共享对象之间使用相同的全局变量?
Is there a way to use the same global variable between two shared objects?
假设我有两个共享对象 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
。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 通过require在不同的Lua状态之间共享全局变量
- 有没有办法在两个共享对象之间使用相同的全局变量?
- 为什么在初始化 C 和 C++ 之间的全局变量时会有这种差异?
- 单例变量和全局变量之间的差异
- C和C++之间的全局变量
- 类变量和全局变量之间的差异
- C++/C在Visual Studio中的两个项目之间共享全局变量
- 在同一DLL的实例之间共享静态和全局变量
- 全局变量和枚举之间的作用域问题
- 全局变量之间的冲突c/c++
- 两个源文件之间的变量(类和全局)
- 在两个cpp文件之间共享头文件中定义的全局变量