gpt4 book ai didi

c++11 - R_SH_GOT32 被 Android 加载程序意外用于原子交换()

转载 作者:行者123 更新时间:2023-12-03 18:03:22 25 4
gpt4 key购买 nike

我的设备无法加载 native 库;错误信息是

java.lang.UnsatisfiedLinkError: dlopen failed: unknown reloc type 160 @ 0xa849dc64 (6010)

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

这是最小的代码示例:
#include <atomic>
#define N 3
struct S {
int a[N];
};

void qq() {
std::atomic<S> s;
s.exchange(S());
}

注意 #define N 2就够了使库正确加载。

我正在使用 NDK r10e ,在 ARM 32 上进行测试,模拟器设置为 API 4.4.4 (API 19)。我尝试了不同的工具链:4.8、4.9 和 clang。我也尝试过 gnuSTL_static 和 shared,以及 libc++。

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

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

NDK_ROOT/sources/cxx-stl/gnu-libstdc++/4.9/include/atomic:233: error: undefined reference to '__atomic_exchange'

最佳答案

对于 android 上的原子支持:

https://developer.android.com/ndk/guides/cpp-support.html

Google 在 NDK 12 (GCC) 中修复了原子库
原子支持:
如果包含 ,则很可能还需要 libatomic。如果您使用的是 ndk-build,请添加以下行:

LOCAL_LDLIBS += -latomic
如果您使用自己的工具链,请使用:

-latomic

试试这个,它应该可以解决链接问题。

关于c++11 - R_SH_GOT32 被 Android 加载程序意外用于原子交换(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com