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

时间:2014-08-15 09:20:22

标签: java android c 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 ++项目: 文件 - >新的 - >其他 - >转换为C / C ++项目(添加C / C ++支持)。

然后我将PATH变量添加到项目属性下找到的环境变量 - > C / C ++构建 - >环境。我将ndk的路径添加到此变量中。

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

  

异常java / lang / UnsatisfiedLinkError;初始化nl / blaat / project_name / JNIWrapper时抛出;   java.lang.UnsatisfiedLinkError:无法从加载器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)

Application.mk

APP_PLATFORM := android-10
APP_ABI := all

1 个答案:

答案 0 :(得分:1)

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

要为所有体系结构构建,请将“APP_ABI:= all”添加到jni / Application.mk。

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