访问静态初始化的__threadvariables时出现分段错误

考虑下面的代码:

#include <stdio.h> __thread bool foo = true; int main() { printf("foo = %d\n", foo); return 0; } 

编译并运行:

 $ g++ tls.cpp -o tls -o tls $ ./tls 

在某些系统上(例如Amazon Linux 2013.09.0,ami-5b792c32,kernel 3.4.62-53.42.amzn1.i686,g ++ 4.6.3 20120306(Red Hat 4.6.3-2)),会导致分段错误只要foo被访问。

另一方面,在代码中显式初始化foo不会导致分段错误:

 #include <stdio.h> __thread bool foo = true; int main() { foo = true; /* Added!! */ printf("foo = %d\n", foo); return 0; } 

为什么第一个代码示例在某个系统上崩溃,而后者不? __threadvariables的静态初始化不应该工作? 操作系统可能被破坏?

你忘了告诉编译器你想要线程支持。 标志很可能是-pthread