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