&引用;java/lang/NoClassDefFoundError:java/lang/Object";当运行JNI程序时

&引用;java/lang/NoClassDefFoundError:java/lang/Object";当运行JNI程序时,java,java-native-interface,hdfs,scribe,Java,Java Native Interface,Hdfs,Scribe,我为安装scribe和hdfs感到非常痛苦。值得赞赏的是,我解决了大部分问题。然而,我被困在这里 我安装了libhdfs,并编写了一个“Hello world”测试: #包括 #包括 使用名称空间std; #包括“hdfs.h” int main(int argc,char*argv[]){ 字符串host=“10.210.74.143”; int端口=9000; hdfsFS=hdfsConnect(host.c_str(),端口); 返回0; } 当我运行它时,它会打印此消息: Error

我为安装scribe和hdfs感到非常痛苦。值得赞赏的是,我解决了大部分问题。然而,我被困在这里

我安装了libhdfs,并编写了一个“Hello world”测试:

#包括
#包括
使用名称空间std;
#包括“hdfs.h”
int main(int argc,char*argv[]){
字符串host=“10.210.74.143”;
int端口=9000;
hdfsFS=hdfsConnect(host.c_str(),端口);
返回0;
}
当我运行它时,它会打印此消息:

Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object 初始化VM时出错 java/lang/NoClassDefFoundError:java/lang/Object
我发誓我已经设置了类路径。首先,您运行的是C程序,而不是使用Java程序中的动态库。你真的打算这么做吗

如果是这样,可能需要显式创建JVM(有趣的):
除非hdfsConnect函数为您执行此操作,否则请参见。

通常当我看到找不到java/lang/Object时,这意味着它找不到java运行时环境(也称为JVM)。hdfsConnect将为我创建一个JVM。我解决了这个问题,libhdfs将jar放在某个路径中,而不是类路径中,我不知道原因。我复制了您提供的代码,然后编译它:gcc-o hello.c-I/usr/java/jdk1.6.0_25/include/-I/usr/java/jdk1.6.0_25/include/linux-L/usr/java/jdk1.6.0_25/jre/lib/amd64/server/-ljvm,但当我运行时。/hello,它打印:VM初始化期间出错无法加载本机库:/usr/libjava.so:无法打开共享对象文件:没有此类文件或directory@renenglish所以他们在某条路上找罐子,嗯?真倒霉至于找不到libjava.so,我认为JAVA_主页可能没有正确设置。在windows上,库(java.dll)将位于java_HOME\b下。而且,库java.dll(或libjava.lib)似乎是JRE的一部分,而不是JDK。但不确定这是否重要。现在我解决了问题,我将libjvm.so复制到/usr/lib64,当我与它链接时,问题是:它找不到它所依赖的libs。正确的方法是使用-Wl,-rpath链接$JAVA_HOME中的libjvm.so(对我来说是:/usr/JAVA/jdk1.6.0_25/jre/lib/amd64/server/libjvm.so) Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object