指定 -xthreadvar 来控制线程局部变量的实现。将此选项与 __thread 声明说明符结合使用,可利用编译器的线程局部存储功能。使用 __thread 说明符声明线程变量后,请指定 -xthreadvar,以便能够将线程局部存储用于动态(共享)库中的位置相关的代码(非 PIC 代码)。有关如何使用 __thread 的更多信息,请参见4.2 线程局部存储。
o 必须是下列值之一:
表 A–51 -xthreadvar 值
值 |
含义 |
---|---|
[no%]dynamic |
[不] 编译动态装入的变量。使用 -xthreadvar=no%dynamic 时对线程变量的访问明显加快,但是不能在动态库中使用目标文件。也就是说,只能在可执行文件中使用目标文件。 |
如果未指定 -xthreadvar,编译器所用的缺省设置取决于是否启用与位置无关的代码。如果启用了与位置无关的代码,则该选项设置为 -xthreadvar=dynamic。如果禁用了与位置无关的代码,则该选项设置为 -xthreadvar=no%dynamic。
如果指定了 -xthreadvar 但未指定任何参数,则该选项设置为 -xthreadvar=dynamic。
在 Solaris 软件的不同版本上使用线程变量需要在命令行中使用不同选项。
在 Solaris 8 软件中,对于使用 __thread 的对象,必须使用 -mt 进行编译,且必须使用 -mt -L/usr/lib/lwp -R/usr/lib/lwp 进行链接。
在 Solaris 9 软件中,使用 __thread 的对象必须使用 -mt 来编译和链接。
如果动态库中存在与位置有关的代码,那么就必须指定 -xthreadvar。
链接程序不支持在动态库中与非 PIC 代码等效的线程变量。由于非 PIC 线程变量要快很多,所以应将其用作可执行文件的缺省设置。
-xcode、-KPIC 和 -Kpic。