0

gcc-4.1.2 中引入了内置的原子操作。但是,我在只有 gcc 3.4.3 的 OpenIndiana 上使用 gcc。现在我的问题是如何在 gcc 3.4.3 中使用原子操作?此外,我曾尝试在 OpenIndiana 中使用 gcc 4.6.1,但它不起作用,因为它抱怨一些运行时库。如果有人成功使用它,请告诉我。

4

4 回答 4

2

我建议你升级你的 GCC 编译器。GCC 3是一个古老的东西。

如果您无法安装较新版本的 GCC,您应该尝试从其源代码编译 GCC 4.6.1 编译器。(不要忘记在源代码树之外的构建树中编译它,并且不要忘记所有依赖项)。

您没有提及或解释为什么您的 GCC 4.6.1 编译失败。它抱怨了哪些运行时库?安装后是否运行ldconfig

于 2011-10-16T19:46:38.103 回答
1

GCC has great inline assembly support, so you could just use __asm to make your own variant of the various atomic ops. It'll be specific to your target platform however, so you'll need some good macros to switch to the right versions.

于 2011-10-16T16:23:20.430 回答
0

要添加到现有答案 - 您是否查看过Spec Files Extra Repository?我自己从未使用过它,但它似乎提供了 gcc 4.6 编译器包。

于 2011-10-16T19:50:39.417 回答
0

在 Solaris 上,替代方法可能是回退到 libcatomic_ops(3C)接口。这些可能会或可能不会被内联,但无论您使用哪种编译器,它们都保证始终可用(并且始终以相同的方式运行)。

除此之外,我支持升级您的 gcc 和/或获取SunStudio 12.2 编译器的建议(它们是免版税的;即使您仅将其用于测试,如果它能够正常工作,代码质量往往会提高使用多个编译器...)。是的,它也可以在基于 OpenSolaris 的发行版上安装/运行。

于 2011-11-24T09:42:46.537 回答