Pen*_*ala 1 c++ gcc atomic clang android-x86
我的代码调用函数__atomic_add_fetch中有一条指令。编译此代码时,出现如下编译错误
错误:未定义对'__atomic_fetch_add_8'的引用
我真的不明白为什么我在调用__atomic_add_fetch时会抛出对__atomic_fetch_add_8的未定义引用。有人可以帮我理解在编译此代码时到底发生了什么吗?
注意:我特别希望了解“内部发生了什么,将__atomic_add_fetch转换为__atomic_fetch_add_8”。不是解决编译问题的解决方案。
您应该使用标准化的atomic_fetch_add
。
在任何情况下,看起来您__atomic_fetch_add
具有给定参数类型(大概为8个字节的整数)的您都无法解析为平台上的汇编指令,因此它正在解析为您需要针对其进行的函数调用链接libatomic
(-latomic
)。
详细编辑:
在gcc上,__atomic_fetch_add
似乎是用于实现stdatomic.h
的内置编译器atomic_fetch_and_explicit
(这只是它的一个简单宏名)。如前所述,您实际上应该使用标准名称atomic_fetch_add_explicit
,而不__atomic_fetch_add
是非便携式的实现细节。
无论如何,问题似乎是gcc和clang不在atomic_fetch_and_explicit
ARM上使用指令来实现(与ARM64或x86-64不同),而是它们从libatomic
库中生成了对(使用全局锁的)函数的调用。该函数的名称似乎是从您尝试fetch_add到的整数(__atomic_fetch_add_8
如果您是fetch_adding到_Atomic uin64_t
__atomic_fetch_add_4
fetch_adding到_Atomic uin32_t
等等)中的字节数派生的。
https://gcc.godbolt.org/z/S67g7b
归档时间: |
|
查看次数: |
258 次 |
最近记录: |