我遇到过一个问题,全局变量的析构函数依赖于共享库中的类实例,在程序结束时会导致分段错误。
不幸的是,这来自一个相当大的代码库,一个最小的工作示例没有出现问题,所以我不能在这里提供具体的代码。
看起来像这样的类导致了段错误:
class Foo {
public:
Foo()
{
//...
}
~Foo()
{
Bar mybar; //Bar is an object defined in the shared library.
}
};
在程序中使用时,如:
Foo myfoo;
int main()
{
/* Code */
return(0);
}
为什么会这样?如果我的类型在本地范围内声明,当它超出范围并且在那时调用析构函数时不会发生错误 - 错误只发生在全局变量上。
我做了一些研究,我想知道问题是否与共享库有关Bar
是在Foo
的析构函数之前被卸载的成员因为我被引导相信这些发生的顺序没有被定义。这可能是问题吗?
解决它很容易,但我之前没有遇到过这种行为,并试图理解它。