1、java代码
public class HelloWorld {
static {
System.loadLibrary("hello");
}
public native void DisplayHello();
/**
* @param args
*/
public static void main(String[] args) {
new HelloWorld().DisplayHello();
System.out.println("hi");
}
}
2、编译java代码
javac HelloWorld.java
3、生成HelloWorld.h
javah -jni HelloWorld
4、写hello.cc
</pre><p><pre name="code" class="cpp">#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void Java_HelloWorld_DisplayHello
(JNIEnv *env, jobject obj)
{
printf("From jni_helloworldImpl.cpp :");
printf("Hello world ! \n");
return;
}
5编译C文件
gcc -shared -fPIC -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/include -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/include/linux/ hello.cc -o libhello.so
</pre><pre name="code" class="cpp">常见问题:
1、<span style="font-family: Arial, Helvetica, sans-serif;">Exception in thread "main" java.lang.UnsatisfiedLinkError: no Hello in java.library.path</span>
<span style="font-family:Arial, Helvetica, sans-serif;">解决: 区分大小写,检查库是不是名字和调用的不一样。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">2、Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld.DisplayHello()</span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="cpp"><span style="font-family:Arial, Helvetica, sans-serif;">export export PATH=/usr/lib/jvm/java/bin:$PATH)</span>
<span style="font-family:Arial, Helvetica, sans-serif;">export LD_LIBRARY_PATH=.
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">3、找不到函数</span>
<span style="font-family:Arial, Helvetica, sans-serif;">解决:C文件里的实现和H文件里的实现要一致,并且编译出来的库是libhello.so 调用时用 hello,曲分大小写</span>
<span style="font-family:Arial, Helvetica, sans-serif;">
</span>