R_SH_GOT32意外被Android加载程序进行原子交换()

Ale*_*ohn 5 g++ atomic android-ndk c++11

我的设备无法加载本机库;错误消息是

java.lang.UnsatisfiedLinkError: dlopen failed: unknown reloc type 160 @ 0xa849dc64 (6010)
Run Code Online (Sandbox Code Playgroud)

实际上160R_SH_GOT32并且不应被Android加载程序所期望。

这是最小的代码示例:

#include <atomic>
#define N 3
struct S {
    int a[N];
};

void qq() {
    std::atomic<S> s;
    s.exchange(S());
}
Run Code Online (Sandbox Code Playgroud)

请注意,足以#define N 2正确加载库。

我正在使用NDK r10e,在ARM 32上进行测试,并将仿真器设置为API 4.4.4(API 19)。我尝试了不同的工具链:4.8、4.9和clang。我尝试了gnustl_static和共享,以及libc ++。

这闻起来像是NDK中的错误吗?

更新:使用NDK 11和clang工具链,链接器仅显示

NDK_ROOT / sources / cxx-stl / gnu-libstdc ++ / 4.9 / include / atomic:233:错误:未定义对'__atomic_exchange'的引用

小智 -1

我在 ndk r10e 上遇到了完全相同的问题。但我的库加载正确,问题出现在运行时。

当我在 ndk r10c 中切换到 clang 3.5 时,问题得到解决。