【问题】
最近在封装一个底层库的时候遇到诡异的问题,用gcc4.1.2编译的程序一切正常,
用gcc4.8.2编译的程序运行总是coredump。 经过分析后发现是初始化顺序问题,代码如下(经过简化):
typedef std::map<std::string, int> typeid_t;
typeid_t TYPEID;
__attribute__((constructor)) void init()
{
TYPEID["http"] = 2;
}
原因:之所以出现coredump,是因为在执行init函数的时候变量TYPEID还根本没有初始化!
【问题代码背景】
一个底层库需要做一些初始化操作,这个初始化需要隐式地自动地进行,需要对上层使用者透明,
而且需要在程序进入main函数之前自动初始化完成。