为什么在链接库中创建的 C++ Std 库容器非空?

Why is a C++ Std lib container created non-empty in a linked lib?

我正在尝试 link 一个库(Poco 项目 - JSON)到我的项目,它本身输出一个动态库 (dll)。

当我创建在此库中定义的 class 实例时(JSON "Object"),它的默认构造函数同时创建了 std::map 和 std::deque,它有时被创建为非空的(我观察到任何一个都有这种行为)。这随后自然会导致未定义的行为。

只有当我的项目处于发布模式(调试符号打开)时才会发生这种情况。为了确保这不是因为某些发布模式调试器问题,我打印了容器的大小——结果相同。

我想用的库是Poco "Foundation"和"JSON",我自己在同一个IDE中编译了它们(我必须使用VS 2008),我有确保运行时库设置在所有三个项目中都是相等的(多线程 DLL /md)

我已经尝试了静态和动态 linking - 结果相同。 那么,这怎么可能,我还错过了哪些其他设置?

对于那些感兴趣的人,我想我自己弄明白了:在项目中的其他一些奇怪的预处理器定义中,某处 _SECURE_SCL=0 已设置。

删除此定义导致 Poco 库使用的预期行为(构造函数创建空对象),但 'main' 应用程序崩溃了。因此,我将主项目的预处理器定义复制到 poco 项目并重建它们(Foundation 和 JSON)。似乎现在可以工作了。