关于GCC初始化的问题
发布时间
阅读量:
阅读量
【问题】****
最近
基于gcc4.8.2进行编译的程序持续输出核心数据报错信息,在运行过程中始终生成coredump日志。在深入排查后发现问题根源在于初始化顺序存在异常,并且可以通过重新排列初始化步骤来解决该问题。
typedef std::map<std::string, int> typeid_t;
typeid_t TYPEID;
attribute((constructor)) void init()
{
TYPEID["http"] = 2;
}
发生原因:核心问题在于,在调用init函数的过程中,变量TYPEID尚未进行初始化设置。
【问题代码背景】****
该底层库负责执行必要的初始化操作,在设计中确保该初始化过程无需显式干预地自动完成,并向其提供足够的透明度。
而且需要在程序进入main函数之前自动初始化完成。
【解决方法】****
想到的第一个解决方法:用指针而不是全局变量,规避初始化顺序的问题:
typedef std::map<std::string, int> typeid_t;
typeid_t* TYPEID;
attribute((constructor)) void init()
{
TYPEID = new typeid_t;
(*TYPEID)["http"] =
全部评论 (0)
还没有任何评论哟~
