C++ 对“__atomic_load_16”的未定义引用

2024-01-07

当尝试对 16 字节块进行原子加载时,出现链接错误。我有以下代码:

#include <atomic>

struct MyStruct{
  long x; long y;
};

struct X{
  std::atomic<MyStruct> myStruct;
};

int main(){
  X x;
  MyStruct s = atomic_load(&x.myStruct);
}

当我用(g++版本5.3.1)编译它时:

g++ --std=c++11 test.cpp

我收到错误

/tmp/ccrvzLMq.o: In function `std::atomic<MyStruct>::load(std::memory_order) const':
test.cpp:(.text._ZNKSt6atomicI8MyStructE4loadESt12memory_order[_ZNKSt6atomicI8MyStructE4loadESt12memory_order]+0x1c): undefined reference to `__atomic_load_16'
collect2: error: ld returned 1 exit status

如果(按照另一篇文章中的提示)我添加“-latomic”标志,则会收到错误“/bin/ld:找不到/usr/lib64/libatomic.so.1.1.0”。事实上该文件不存在。

有什么建议么?

Gavin


Clang 编译器也有同样的问题,简而言之:安装 libatomic 并与其链接。 (在 RHEL 中,库名为libatomic.so.1所以你可能需要-l:libatomic.so.1设置名称)

https://releases.llvm.org/14.0.0/tools/clang/docs/Toolchain.html#libatomic-gnu https://releases.llvm.org/14.0.0/tools/clang/docs/Toolchain.html#libatomic-gnu

如果编译器不知道如何将“c++_atomic_operation_code”翻译成 CPU 指令,它会向 libatomic 寻求帮助。默认编译参数使程序更普遍地可以在 x86/64 CPU 上运行,因此某些 CPU 指令被禁用。

另一方面,使用 libatomic 将有机会以更快的速度执行更现代的指令,请参阅下面的评论。感谢@彼得·科德斯 https://stackoverflow.com/users/224132/peter-cordes

Within -march=native,编译器可以利用更多的指令集来翻译代码。 (你的CPU比Generial-x86/64-CPU)

或者链接到libatomic以避免分配-march.

例如,使用tbb时,通常会要求libatomic来制定算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 对“__atomic_load_16”的未定义引用 的相关文章

随机推荐

  • Android:处理ListView回收

    我正在开发一个音板应用程序 在其中使用 Listview Activity 但是由于Android的Listview具有回收其listview的属性 滚动列表视图时 我对所选文本视图所做的更改会反映在所有页面中 我不希望这种事发生 那么我该
  • J2ME 的 JSON 解析器

    我需要一个与 J2ME CLDC 1 1 配合使用的基本 JSON 解析器 Google 搜索返回了大量关于此问题的答案 有些甚至在 stackoverflow 上 但似乎所有内容都指向不再可用的库和解决方案 例如 很多都指向应该位于 js
  • 过滤负时间增量

    考虑一系列持有timedelta64 ns 测量两个事件 A 和 B 之间的时间差 gt time deltas 499900 1 days 23 45 13 499916 1 days 23 50 57 499917 00 03 27 4
  • VB 6:如何执行 .bat 文件但等到其运行完成后再继续?

    VB 6 如何执行 bat 文件但等到其运行完成后再继续 您将需要使用 Win32 API 调用Shell执行Ex http msdn microsoft com en us library bb762154 VS 85 aspx和从SHE
  • 如何处理自动模块中的拆分包?

    我目前正在测试将现有应用程序迁移到 Jigsaw Modules 我的模块之一使用 ElasticSearch 及其 Groovy 插件 org elasticsearch elasticsearch org elasticsearch m
  • boost::spirit 替代解析器返回重复项

    我正在研究https github com F Bergemann RegexSplitter https github com F Bergemann RegexSplitter 目的 解析正则表达式字符串 并创建可破坏和不可破坏的顶级子
  • 将整数数组转换为字符串的最佳方法是什么?

    我想转换一个 int 数组 像这样 1 1 2 1 转换为字符串 1121 最好的 最Pythonic的 方法是什么 我总是可以这样做 然后删除多余的括号 gt gt gt str 1 2 1 1 1 2 1 1 或者我可以这样做 s fo
  • Oracle 数据库变更通知

    我是 DCN 新手 我可以使用它来检测表中列的更新以及该表中的插入吗 我指的是this https docs oracle com cd E11882 01 java 112 e16548 dbchgnf htm JJDBC28815 是的
  • 如何修复div高度

    我正在开发一个聊天控制应用程序 我的问题是这样的 我输入文本 这用于拨打休息电话 获取响应并将其添加到聊天窗口 目前我的问题是这样的 聊天窗口变大 页面随着聊天框 div 一起滚动 有人可以告诉我如何停止整个页面的这种增量吗 简单来说 我的
  • 如何停止R中的for循环并保留数据

    我的代码在日期的 for 循环中运行 该代码需要一段时间才能运行 还剩几天时间 但我迫切需要任何结果 有没有办法打破代码 for 循环 但保留到目前为止已生成的所有数据 是的 您可以按 escape 检查结果 然后重新启动循环 for ii
  • 扩展协议,其中 Self:Swift 中的通用类型(需要 <...> 中的参数)

    我有一个需要泛型的类class Collection
  • 如何将 csv 字符串转换为 pandas 中的列表?

    我正在使用具有以下格式的 csv 文件 Id Sequence 3 1 3 13 87 1053 28576 2141733 508147108 402135275365 1073376057490373 97003854893559701
  • Jquery - 使用 .load 和选择器加载页面不会执行脚本?

    我正在尝试使用 load 方法将一个页面加载到另一页面中 此加载的页面包含一个我想在加载完成后执行的脚本 我整理了一个简单的示例来演示 索引 html
  • MVC:存储库和服务

    我对存储库中定义的内容以及留给服务的内容的限制感到困惑 存储库应该只创建与数据库中的表匹配的简单实体 还是可以使用这些实体的组合创建复杂的自定义对象 换句话说 服务是否应该在存储库上进行各种 Linq to SQL 查询 或者所有的查询都应
  • GSON 将布尔值序列化为 0 或 1

    All 我正在尝试执行以下操作 public class SomClass public boolean x public int y public String z SomClass s new SomClass s x true s y
  • Pandas Multiindex 从索引的第一个条目获取值

    我有以下多索引数据框 from io import StringIO import pandas as pd datastring StringIO File no runtime value1 value2 A 0 0 12 34 A 0
  • 以近乎实时的间隔刷新 RSS 源

    我有一个可以获取几百个 RSS 提要的系统 目前它们的刷新周期为 10 分钟 但我希望能够加快速度 以近实时 推送间隔获取 RSS 源的策略是什么 我遇到的一些解决方案 在 1 分钟时进行一次获取 如果没有变化 则在 2 处再次获取 然后是
  • Wt::Dbo 中的循环依赖

    Wt 建议使用前向声明来避免循环依赖 Settings h include
  • 分配给属性的 NSMutableArray 的正确内存处理?

    我有一个这样声明的属性 property nonatomic retain NSMutableArray pricingLevels 我这样分配它 self pricingLevels NSMutableArray alloc init 在
  • C++ 对“__atomic_load_16”的未定义引用

    当尝试对 16 字节块进行原子加载时 出现链接错误 我有以下代码 include