我已经在这里看到了这个问题,尝试了建议的修复,但到目前为止对我来说还没有成功。我有相当多的Java经验,但JNI是很久以前的事了,虽然从来没有在Linux上做过……
我正在尝试在Linux上运行一个简单的HelloWorld JNI应用程序。
小java文件:
class HelloWorld {
private native void print();
public static void main(String[] args){
new HelloWorld().print();
}
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("HelloWorld");
}
}小C文件:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}通过以下方式编译C文件:
gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so通过以下方式运行该应用程序:
java HelloWorld或
java -Djava.library.path=/home/nxp40954/jnitesting/. HelloWorld但这并不好,得到一个:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/nxp40954/jnitesting/libHelloWorld.so: /home/nxp40954/jnitesting/libHelloWorld.so: cannot open shared object file: No such file or directory很奇怪,因为实际上有一个/home/nxp40954/jnitesting/libHelloWorld.so文件。
有谁有线索吗?
发布于 2011-09-02 22:26:34
按如下方式执行:
export LD_LIBRARY_PATH=.
java HelloWorld当无法加载.so文件时,将引发java.lang.UnsatisfiedLinkError。LD_LIBRARY_PATH变量指向查找*.so文件的额外位置。
我使用的是32位ubuntu和sun java。我是这样编译的:
gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux -o libHelloWorld.sohttps://stackoverflow.com/questions/7284129
复制相似问题