我正在使用Linux(Ubuntu 12.10)。我在网上尝试了this问题和其他很多问题,但我无法解决我的问题。
这是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
答案 0 :(得分:3)
您的236,800
13,300
7,100
2,500
5,600
5,900
11,700
33,100
172,200
17,400
43,900
1,200
2,100
1,900
500
600
3,700
23,300
53,300
32,900
10,100
3,300
400
500
11,500
7,700
3,700
1,700
700
6,300
26,400
22,700
12,400
5,500
700
500
1,000
500
25,200
700
900
41,400
328,700
900
1,800
329,100
6,100
47,700
500
5,100
11,900
300
12,800
0
200
31,100
900
500
2,500
8,500
5,600
文件不应包含HelloWorld.c
或main
。相反,它应该包含display
方法的实现。例如:
HelloWorld.display
答案 1 :(得分:2)
您在C文件中的本机函数的实现必须与生成的方法签名相匹配。
使用
JNIEXPORT void JNICALL Java_HelloWorld_display(JNIEnv * env, jobject obj)
{
}
不
void display()
{
}