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

我正在尝试使用本机代码创建一个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。 我将ndk的路径添加到此变量中。

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

exceptionjava / 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) 

Application.mk

 APP_PLATFORM := android-10 APP_ABI := all 

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

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

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