我想运行一个简单的JNI例子,我运行一个java应用程序,通过动态库调用C++函数。Linux,java.lang.UnsatisfiedLinkError:java.library.path中没有“库文件”
我将发布我使用的以下代码和终端命令。
的.java
public class Lab{
public native void hello();
static {
System.loadLibrary("hello");
}
public static void main(String args[]) {
new Lab().hello();
}
}
GET的.class并通过终端
javac Lab.java
javah -jni Lab
HELLO.CPP文件
#include "Lab.h"
#include <stdio.h>
#include <iostream>
JNIEXPORT void JNICALL Java_Lab_hello(JNIEnv *env,jobject jobj) {
cout<<"Hello World"<<endl;
}
生成的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
最后运行文件:
java -Djava.library.path=. Lab
,然后我得到的错误:
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)
我知道有其他职位与此相同的问题,但没有这些解决方案的工作对我来说,不幸。 我已经尝试过的东西,如:
- 的hello.so文件复制到“/ usr/lib目录”,这是在Java库路径,并给它使用chmod许可;
- 使用export aswell将hello.so文件路径添加到$ LD_LIBRARY_PATH;
- 在运行java文件时添加hello.so路径(java -Djava.library.path =“/ root/Desktop”Lab);
- 使用ldconfig甚至没有工作。
我需要在一个主要的应用程序上使用这个,但我只是想一个快速的例子,即使我在其他帖子上阅读的所有解决方案,我都无法使它工作。
谢谢。
嗨,你有没有试图将.so文件复制到.class文件夹下? – Igor
你好,是以上所有文件都在同一个目录下 – RubenC