【发布时间】:2014-05-13 08:50:58
【问题描述】:
我构建了几个库(静态库和动态库),它们都需要访问包含命名空间全局变量的命名空间。
更改变量的函数在一个 cpp 文件中定义。如果库中的函数访问其中一个函数,它似乎会创建整个 cpp 文件的本地副本,包括所有变量(可能还有函数)。这意味着,每个库都访问不同地址的变量,导致一团糟,因为变量必须由所有库共享。我该如何解决这个问题?
源代码,精简到基本:
//include.h
namespace myns {
extern int vars;
}
.
//include.cpp
#include <myns/include.h>
namespace myns {
int vars;
void MyClass::setVars(int var) {
vars = var;
}
}
.
//myclass.h
namespace myns {
class MyClass {
void setVars(int var);
}
}
.
//myclass.cpp.in
//This will be generated by CMake and then compiled into a library
#include <myns/@package@/myclass.h>
namespace myns {
namespace @package@ {
class __declspec(dllexport) MySubclass : public MyClass {
MySubclass();
}
MySubclass::MySubclass() {
setVar(@value@);
}
}
}
using namespace myns;
extern "C" __declspec(dllexport) void exported_function() {
new MySubclass();
}
每次调用exported_function() 时,vars 变量都会有不同的地址。为什么会这样?我需要所有库函数来访问 same vars 变量!
【问题讨论】:
标签: c++ namespaces shared-libraries static-libraries