Oracle® Developer Studio 12.5:C 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

3.2.3 实现说明

如果多个组件(例如可执行文件或共享库)需要原子运行时,则应该将每个组件与相应的 –xatomic 选项动态链接以创建正确的动态依赖关系。不应生成在链接库时需要提供原子选项的共享库。

由于以下原因,建议不要在同一进程中同时使用这两个运行时库:

  • 一些原子类型需要调用运行时支持库才能执行同步。两个运行时系统具有不同的内部数据结构,因此两个库无法同步同一对象。

  • Oracle Developer Studio 库 libstatomic 为函数使用与 libatomic 相同的全局符号名称。如果在同一进程中使用两个库,则可执行文件或库可能会调用非预期库中的函数。

尝试同时使用两个运行时库的程序可能最初看起来可以工作,但是很可能会失败且无法为其提供支持。


注 -  使用 –latomic 进行链接不会导致与 /usr/lib/libatomic.so.1 链接在一起。该库是 GCC 实现,其目的是与 GCC 一起使用,直到在 Oracle Solaris 和 Oracle Linux 中发布兼容库为止。

由于许多原子操作是内联的,因此应用程序也许能够使用原子功能,而不依赖于原子运行时库。行为是特定于实现的,因此如果升级编译器,则结果可能会更改。如果您的应用程序仅使用标量原子类型(flagscharintlongpointers),且在 x86 平台上生成,则生成的库可能不需要 libstatomic。可以尝试使用 –xatomic=none 选项编译这样的应用程序或库,并检查它是否正确地链接和运行。