我使用的是 Linux (Ubuntu 12.10)。我已经尝试过this问题关于SO和网上很多其他人,但我无法解决我的问题。
这是java文件:
class HelloWorld
{
public native void display();
static
{
System.loadLibrary("HelloWorld");
}
public static void main(String args[])
{
HelloWorld hw = new HelloWorld();
hw.display();
}
}
我使用 javac HelloWorld.java
编译它.
然后我从.class
创建了头文件文件使用 javah -jni HelloWorld
。我得到了这个头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: display
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_display
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
之后我创建了以下 C 文件:
#include <stdio.h>
#include "HelloWorld.h"
void display();
int main()
{
display();
return 0;
}
void display()
{
printf("Hello World Naveen\n");
}
并使用 gcc -o libHelloWorld.so -fPIC -lc -shared -I/usr/lib/jvm/java-6-oracle/include/ -I/usr/lib/jvm/java-6-oracle/include/linux HelloWorld.c
编译它.
然后我做了echo $LD_LIBRARY_PATH=.
。但是当我运行java HelloWorld
时我得到UnsatisfiedLinkError
最佳答案
您的HelloWorld.c
文件不应包含main
或display
。相反,它应该包含 HelloWorld.display
方法的实现。例如:
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_display (JNIEnv * env, jobject obj) {
printf ("Hello World\n");
}
关于java - 简单 HelloWorld 程序的 JNI : Getting java. lang.UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247882/