c++ - 链接到多个项目时的全局数据的多个实例

标签 c++ linker extern

我有一个 Visual C++ 解决方案,它由 3 个项目组成。

这些项目之一,项目“A”被其他两个项目使用,它有一些应该始终相同的全局数据。

但是,当我将项目 A 链接到其他两个项目时,似乎项目 A 的两个实例正在处理不同的数据。

会是这种情况吗?我该如何设置链接过程以防止这种情况发生?

---更新使事情更清楚

- Project 1 -

main () {
  init();
  test();
}

- Project 2 -

test () {
  cout << get_data();
}

- Project A -

int data;

init() {
  data = 123;
}

get_data() {
  return data;
}

正如您在此示例中所见,我正在第一个项目中初始化项目 A 的数据,并从第二个项目访问它。我的观察是,当从第二个项目进行访问时,数据没有被初始化。

项目 A 和项目 2 都静态链接到项目 1,因此输出是单个可执行文件。

最佳答案

全局驻留在进程内存空间中的单个位置。如果您有两个进程共享一个模块,那么它们每个都有单独的变量,是的。

您需要使用 IPC 在进程之间共享数据。

关于c++ - 链接到多个项目时的全局数据的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622582/

相关文章:

c++ - 分解来自文件c++的输入

c - Objective-C 全局整数数组未按预期工作

c++ - 使用 "auto"的声明是否与使用具体类型说明符的外部声明匹配?

c++ - 使用不在根项目目录中的源文件(搜索路径中包含的文件)时出现链接错误 (Visual C++)

c++ - extern "C"用于成员静态回调函数

c++ - 返回对象值时互斥

c++ - 如何在 setter 方法中设置 boost::optional 成员变量的值?

c++ - 每个项目的 Boost.Build 条件库编译

c++ - 函数没有被执行

macos - 在Mac 0SX上使用x86汇编程序的Hello World