java.lang.UnsatisfiedLinkError: Native method not found

Question:


I'm trying to make a NDK application, but i get this error java.lang.UnsatisfiedLinkError: Native method not found: com.example.hellondk.jni.HelloNDK.hello:()I
I don't understand because the name of the C++ funtion is the same as the java packagename and class
HelloNDK.cpp
#include <jni.h>

JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o){
    return (jint) 2;
}
HelloNDK.java
package com.example.hellondk.jni;

public class HelloNDK {
    public native int hello();

    static {
        System.loadLibrary("HelloNDK");
    }
}
Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := HelloNDK
LOCAL_SRC_FILES := HelloNDK.cpp

include $(BUILD_SHARED_LIBRARY)
 
 

Solution 1:

 

You're exporting it as a C++ function, but the JNI linker doesn't understand C++ name mangling, so it won't be able to find it.
You can use extern "C" to have the function exported without C++ name mangling:
extern "C" JNIEXPORT jint JNICALL Java_com_example_hellondk_jni_HelloNDK_hello(JNIEnv* env, jobject o)
{
    return (jint) 2;
}

 

Solution 2:

It could be the problem with the Generating .so shared Library.  Please generate the shared library which compiles all the .c/.cpp files.

 

 

 

Comments

  1. Hi,
    i am trying c programming and getting same error what to do

    ReplyDelete

Post a Comment

Popular posts from this blog

How to draw an overlay on a SurfaceView used by Camera on Android?

Android TCP Connection Chat application

Create EditText with dropdown in android