由于每个编译器都有自己的线程本地存储版本,我最终为它创建了一个宏。现在唯一的问题是 GCC(关闭了 pthreads),这给了我:
“此目标不支持线程本地存储”
很公平,因为在这种情况下 pthreads 实际上是关闭的。问题是,是否有一种通用的方法可以使用一些宏来检测这一点,例如 #ifdef __GCC_XXX_NO_THREADS_XXX ?
编辑:请参阅下面接受的答案。另外,这是我的懒惰解决方案:
$ touch test.c
$ gcc -E -dM test.c > out.1
$ gcc -pthread -E -dM test.c > out.2
$ diff out.*
28a29
> #define _REENTRANT 1
这是在 Mac OS X 上。我不确定它是便携的还是其他的......