Advertisement

关于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)

还没有任何评论哟~