我正在尝试创建一个简单的Java应用程序,它使用JNI来调用一些本机函数.我已经按照JNI编程指南中的示例进行了操作,似乎无法使它们工作.我有以下用Java编写的Hello World程序:
class HelloWorld {
private native void print();
public static void main(String [] args) {
new HelloWorld().print();
}
static {
System.load("/home/mike/Desktop/libHelloWorld.so");
}
}
Run Code Online (Sandbox Code Playgroud)
我javac HelloWorld.java正常使用它编译它.
我还在HelloWorld.c文件中有print函数的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;
}
Run Code Online (Sandbox Code Playgroud)
然后我跑javah -jni HelloWorld,最后是以下:
gcc34 -shared -fpic -o libHelloWorld.so -I/<path to JDK>/include -I/<path to JDK>/include/linux HelloWorld.c
Run Code Online (Sandbox Code Playgroud)
gcc34是我的机器上工作的GCC程序的名称(我不控制它),我显然在该命令中放置了JDK的真实路径.当我运行我的程序时,使用标准java HelloWorld,我得到一个错误说明如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/mike/Desktop/libHelloWorld.so: /home/mike/Desktop/libHelloWorld.so: wrong ELF class: ELFCLASS64 (Possible …Run Code Online (Sandbox Code Playgroud)