【发布时间】:2011-07-04 03:14:51
【问题描述】:
我有一个在运行时加载的 DLL。 DLL 依赖于一个静态变量进行内部工作(它是一个 std::map),这个变量是在 DLL 中定义的。
当我在加载后从 DLL 调用第一个函数时,我从 DLL 中得到一个 SegFault,映射从未初始化。从我从 DLL Loading 中读到的所有内容来看,静态和全局数据初始化应该在调用 DLLMain 之前发生。
为了测试静态初始化,我添加了一个打印出消息的静态结构,甚至还设置了一个断点。
static struct a
{
a(void) { puts("Constructing\n"); }
}statica;
在 DLLMain 或函数被调用之前没有消息或中断。
这是我的加载代码:
dll = LoadLibrary("NetSim");
//Error Handling
ChangeReliability = reinterpret_cast<NetSim::ChangeReliability>
(GetProcAddress(dll, "ChangeReliability"));
ChangeReliability(100);
我已经验证了dll版本是正确的,多次重建整个项目,但没有区别。我的想法很新鲜。
【问题讨论】:
-
是否引用了您的
statica对象?如果没有,它可以被优化出来。