0
列出了反向跟踪堆栈。我们只需调用getenv(),gnu libc版本是2.17。当调用getenv()时,__strlen_sse2中的段出现故障()
(gdb) bt
#0 0x00007ffff6c59b71 in __strlen_sse2() from /lib64/libc.so.6
#1 0x00007ffff6c0b036 in getenv() from /lib64/libc.so.6
#2 0x0000000000e23f5e in AdsProperties::AdsProperties (this=0x184ad60
<config>) at XXXXXX
#3 0x0000000000a3d355 in __static_initialization_and_destruction_0
(__initialize_p=1, __priority=65535)at XXXXXXXX
#4 0x0000000000a3d499 in _GLOBAL__sub_I_server_main.cpp(void)
#5 0x0000000000eff50d in __libc_csu_init()
#6 0x00007ffff6bf4ac5 in __libc_start_main() from /lib64/libc.so.6
#7 0x000000000077b6e9 in _start()
的代码是这样的:
const std::string NAME_ENV_KEY("NAME");
char const* name = getenv(NAME_ENV_KEY.c_str());
和名字环境设置好的。
你是绝对正确的。变量NAME_ENV_KEY是类的静态常量成员:ClassA(可能在class_a.h中定义),并且此变量的分配位于文件class_a.cpp中。然后我们首先将class_a.cpp&class_a.h编译为class_a.a。然后main.cpp调用ClassA的构造函数。我想当我们调用ClassA的构造函数时,不能执行NAME_ENV_KEY的赋值。 –