java - 使用 API21 编译时出现 UnsatisfiedLinkError

标签 java android c++ android-ndk android-5.0-lollipop

我的项目使用 NDK r10d 作为 C++ 代码。 当我使用 API19 编译该项目时,它工作得很好,但是当我使用 API21 编译它时,它在运行时崩溃。

当加载 c lib 时,我得到:

dlopen("/data/app-lib/com.my.app-2/libMyCode.so") failed: dlopen failed: cannot locate symbol "stpcpy" referenced by "libMyCode.so"...

然后它崩溃了:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "stpcpy" referenced by "libMyCode.so"...

我使用运行 Android4.4.4 的 OnePlus One 在这两种情况下进行测试。

有什么想法吗?

最佳答案

是的 - API 21 中的 android libc header 已更改。以前不存在的一些函数被重定向到旧 header 中的其他函数。因此,如果您想在旧设备上运行,则无法真正使用 API 21 进行构建,除非您非常小心地解决此类问题。如果您需要使用 API 21 中较新的 native API,但仍与旧设备兼容,则无论如何您都需要手动完成此操作。

如果您只需要 Java 端的较新 API,只需在 Application.mk 中设置单独的 APP_PLATFORM=19,同时使用较新的 SDK 构建 Java 端.

参见Cannot load library: reloc_library[1285]: cannot locate 'rand'有关此问题的更多详细信息。

关于java - 使用 API21 编译时出现 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509779/

相关文章:

java - 使用Java程序作为Java Web APP的一部分

android - 我应该如何将社交媒体 SSO 与我的自定义登录服务正确集成?

java - 如何动态调用基类中由字符串值指定的子类方法?

c++ - NetworkManager 和 Qt 问题

C++ 数组指针 [] 或++

java - Jackson - 错误显示在 "Trace"\"Debug"日志级别

java - 在同一方法中修改 ConcurrentHashMap 和 Synchronized ArrayList

c++ - Visual Studio 2012/2013 类内成员初始化

java - 方法帮助-初学者错误

java - 更改回收者 View 中行中的特定项目