Oracle® Developer Studio 12.5:C 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

3.2.2 与 GCC 原子库 libatomic 的兼容性

如果您的应用程序或库使用原子,且它需要与使用 GCC 版本的 libatomic 的可执行文件和库互操作,则必须将您的 Oracle Developer Studio 程序与 GCC 版本的 libatomic 链接在一起。请务必确保程序中只有一个版本的原子运行时库。

要将 Oracle Developer Studio C 和 C++ 程序与 GCC 版本的 libatomic 链接在一起,请使用编译器选项 –xatomic=gcc

如果您在较旧的系统上(/usr/lib 中没有 GCC 版本的 libatomic)链接和运行,则不必担心不兼容的原子支持。在这种情况下,可以将 libstatomic 与该系统上的 GCC 二进制文件组合使用,因为没有其他原子库在使用中。

Oracle Developer Studio 编译器最适合 libstatomic 库,但是与 GCC 的 libatomic 版本 1.1 兼容,且具有下面列出的已知问题:

  • GCC 4.8 包括 libatomic 1.0.0。- 如果在 C 11 程序中避免使用浮点原子,则此版本的 libatomic 支持 C11 和 C++11 原子。在更高版本的发行版推出之前,GCC 4.8 编译器本身不支持 C11。

  • GCC 4.9 和 5.1 包括 libatomic 1.1。- 此版本包括 C11 的浮点原子,具有这些版本的 GCC 编译器支持 C11 原子关键字。


    注 -  C11 程序可能会采用原子函数的地址,这仅对非通用函数是合法的。与 libatomic 1.0.0 或 libatomic 1.1 一起使用时,这将无法正常工作,因为库假定所有的原子函数始终由编译器内联且不需要库中的代码。可以在 atomic 手册页中查看这些函数的列表。如果需要获取这些函数的函数指针,则应该使用 libstatomic

Oracle Linux 7.x 和 Oracle Solaris 11.3 包括带有 libatomic 1.0.0 的 GCC 4.8。