UnsatisfiedLinkError:无法从加载程序加载X.

Mar*_*rth 5 c java android android-ndk unsatisfiedlinkerror

我正在尝试使用本机代码创建一个Android项目来调用OpenGl函数.

我正在按照本指南来实现这个项目:http: //www.learnopengles.com/calling-opengl-from-android-using-the-ndk/

根据本指南,我必须"在Package Explorer中右键单击项目,从下拉菜单中选择Android Tools,然后选择Add Native Support ...".但是,这个选项在我的eclipse版本中不可见(最新的osx版本来自与sdk捆绑在一起的android站点).

为了解决这个问题,我使用以下方法手动将项目转换为C/C++项目:file - > new - > other - > Convert to a C/C++ Project(添加C/C++支持).

然后我将PATH变量添加到项目属性 - > C/C++ build - > Environment下找到的Environment变量.我将ndk的路径添加到此变量中.

我做了更多必要的make文件并生成了jni文件.该项目确实在libs目录中编译并生成.so文件.但是,当我尝试在设备上运行项目时,我收到以下运行时错误:

异常java/lang/UnsatisfiedLinkError; 初始化nl/blaat/project_name/JNIWrapper时抛出; java.lang.UnsatisfiedLinkError:无法从loader dalvik.system.PathClassLoader [dexPath =/data/app/nl.blaat.project_name]加载GLCore.

当我在线搜索时,问题的通常答案是本机代码没有编译,但在我的情况下确实如此.NDK提供的示例项目给出了同样的问题.

编辑:一些可能有助于识别问题的额外信息.

  • 在osx和windows上都会出现问题.
  • 问题出现在我的三星Galaxy s2和s5上,所以它可能不是特定于设备的.
  • 随SDK提供的示例也会出现此问题.

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := OpenGLCore
LOCAL_CFLAGS    := -Wall -Wextra
LOCAL_SRC_FILES := OpenGLCore.c jni.c
LOCAL_LDLIBS := -lGLESv2

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

Application.mk

APP_PLATFORM := android-10
APP_ABI := all
Run Code Online (Sandbox Code Playgroud)

mst*_*sjo 1

如果 NDK 中的示例项目给出相同的错误,您确定它是为正确的架构构建的吗?大多数 Android 设备都运行 ARM 处理器,但有些设备运行在 x86 和 mips 上,并且许多 NDK 示例默认情况下仅针对 ARM 构建。

要针对所有架构进行构建,请将“APP_ABI := all”添加到 jni/Application.mk。

另外,为了确保调整后的构建过程确实有效,请首先尝试通过在项目根目录中的终端中手动运行 ndk-build 来构建 .so,以获取 NDK 示例。(此后您可能需要刷新 eclipse 中的文件夹结构,以确保找到并包含新构建的库。)