根据我的理解,如果我有一些代码,其中包含一个 _Thread_local
变量,并将其编译到一个共享库中,那么所有对变量的访问都要经过 __tls_get_addr()
. 然而,如果我把它编译成一个静态库,访问就会在没有该函数的情况下发生(在x64上,它使用的是 %fs
).
我的问题是 我怎样才能强迫GCCClang使用 __tls_get_addr()
即使是在静态库中?
编译时使用 -fpic
或 -fpie
似乎并不奏效。extern
或 volatile
. 另外,我明白这样做会导致性能下降,请不要让我证明这个问题背后的原因。