Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UnsatisfiedLinkError with JNI

.h file

#include <jni.h>
#include "NativePackage_HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)   {
printf("Hello world!\n");
return;
}

Java

package NativePackage;

public class HelloWorld {
public native void displayHelloWorld();

static {
    System.loadLibrary("hello");
}

public static void main(String[] args) {
    new HelloWorld().displayHelloWorld();
}
}

.c file

#include <jni.h>
#include "NativePackage_HelloWorld.h" 
#include <stdio.h>

JNIEXPORT void JNICALL Java_NativePackage_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj){
printf("Hello world!\n");
return;
}

I've compiled my .c file using

gcc -I /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/ -I  /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/darwin/ -fPIC -o hello -c   HelloWorldImp.c 

However, trying to run using java NativePackage/HelloWorld produce the following error:

java  -Djava.library.path=NativePackage/ NativePackage/HelloWorld

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at NativePackage.HelloWorld.<clinit>(HelloWorld.java:7)

I'm running on a MAC OS X 10.10

like image 466
Ahmed Ebaid Avatar asked Jan 10 '23 10:01

Ahmed Ebaid


1 Answers

Try using

System.load("/home/project/lib/libhello.so");

give the absolute path for the library.

that helped me when i had the same problem.

like image 79
girish946 Avatar answered Jan 22 '23 19:01

girish946