Rub*_*enC 2 c++ java linux java-native-interface unsatisfiedlinkerror
我正在尝试运行一个简单的JNI示例,其中我运行一个通过动态库调用c ++函数的java应用程序.
我将发布我使用的以下代码和终端命令.
的.java
public class Lab{
public native void hello();
static {
System.loadLibrary("hello");
}
public static void main(String args[]) {
new Lab().hello();
}
}
Run Code Online (Sandbox Code Playgroud)
通过终端获取.class和头文件
javac Lab.java
javah -jni Lab
Run Code Online (Sandbox Code Playgroud)
hello.cpp文件
#include "Lab.h"
#include <stdio.h>
#include <iostream>
JNIEXPORT void JNICALL Java_Lab_hello(JNIEnv *env,jobject jobj) {
cout<<"Hello World"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
生成lib文件"hello.so":
gcc -shared -fpic -o hello.so -I/usr/lib/jvm/jdk1.8.0_45/include -I/usr/lib/jvm/jdk1.8.0_45/include/linux hello.cpp
Run Code Online (Sandbox Code Playgroud)
最后运行文件:
java -Djava.library.path=. Lab
Run Code Online (Sandbox Code Playgroud)
然后我得到错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at Lab.<clinit>(Lab.java:6)
Run Code Online (Sandbox Code Playgroud)
我知道还有其他帖子有同样的问题,但不幸的是,这些解决方案都没有对我有用.我已经尝试过这样的事情:
我需要在一个主要的应用程序上使用它,但我只是尝试一个快速的例子,即使我在其他帖子上阅读的所有解决方案也无法使其工作.
谢谢.