如果多个组件(例如可执行文件或共享库)需要原子运行时,则应该将每个组件与相应的 –xatomic 选项动态链接以创建正确的动态依赖关系。不应生成在链接库时需要提供原子选项的共享库。
由于以下原因,建议不要在同一进程中同时使用这两个运行时库:
一些原子类型需要调用运行时支持库才能执行同步。两个运行时系统具有不同的内部数据结构,因此两个库无法同步同一对象。
Oracle Developer Studio 库 libstatomic 为函数使用与 libatomic 相同的全局符号名称。如果在同一进程中使用两个库,则可执行文件或库可能会调用非预期库中的函数。
尝试同时使用两个运行时库的程序可能最初看起来可以工作,但是很可能会失败且无法为其提供支持。
由于许多原子操作是内联的,因此应用程序也许能够使用原子功能,而不依赖于原子运行时库。行为是特定于实现的,因此如果升级编译器,则结果可能会更改。如果您的应用程序仅使用标量原子类型(flags、char、int、long 或 pointers),且在 x86 平台上生成,则生成的库可能不需要 libstatomic。可以尝试使用 –xatomic=none 选项编译这样的应用程序或库,并检查它是否正确地链接和运行。