如何使用g ++在64位solaris sparc上编译线程本地存储(TLS)
我有一段C / C ++代码,它使用__thread关键字进行线程本地存储,但是在使用g ++(版本4.0.2)在64位Solaris Sparc上编译它时遇到问题,而它在linux上用g ++编译并运行正常34编译器。这是一个源代码示例:
__thread int count = 0;
'g ++ -dumpversion'命令的编译器信息返回'4.0.2','g ++ -dumpmachine'显示'sparc-sun-solaris2.8'。 'uname -a'显示'SunOS devsol1 5.9 Generic_118558-26 sun4u sparc SUNW,UltraAX-i2'。
使用g ++运行make时出现错误消息:“error:此目标不支持线程本地存储”,我使用的编译器选项是
-m64 -g -fexceptions -fPIC -I../fincad -I/usr/java_1.6.0_12/include -I/usr/java_1.6.0_12/include/solaris -I/opt/csw/gcc4/lib/sparcv9 -I/opt/csw/gcc4/lib/gcc/sparc-sun-solaris2.8/4.0.2/sparcv9 -I. -I/usr/include -I/usr/include/iso -I/usr/local/include
我非常感谢任何帮助,因为我在周末一直在努力解决这个问题并面临最后期限。
谢谢,
查尔斯
没有找到相关结果
已邀请:
3 个回复
芯伶句餐绕
掀辟髓观粟
命令行选项添加到g ++:这个选项意味着,用GCC的说法:“执行POSIX线程支持所需的一切”。这可能会解锁对ѭ4的支持。 带有
的线程本地存储需要一些特定的系统支持,在编译器中,也需要在链接器中(在编译结束时调用静态链接器,在执行程序时调用动态链接器)。我不知道你是否支持你的特定组合(一个相当古老的g ++与一个相当老的Solaris)(一些谷歌搜索告诉我,有些人可以使用旧的gcc [3.4.3]和更新的Solaris [10])。如果不支持,可以使用POSIX / Single Unix功能
,
和
。它们有点慢,并不像
限定符那么方便,但至少它们起作用。
苦诫