JNI学习(一),入门

只为了记录学习过程


1,创建HelloWorld.java

classs HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}

2,javac HelloWorld.java 生成相应的 .class

3,生成相应的.h文件 

javah -jni HelloWorld 

-jni 为默认参数可以省略

JNI学习(一),入门_第1张图片

4,编写相应的HelloWorld.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;
}

这里注意在方法类中 添加两个变量 Java_HelloWorld_print(JNIEnv *env, jobject obj) 也就是 env 和那个obj 否则会报错 

Parameter name omitted error


到这里开始 就需要编译lib库了,本人愚钝没有学过makefile  网上搜了一下 看到一篇文章 照猫画虎 蒙了一下 居然对了

http://www.microdu.com/thread-6795-1-1.html 为我搜到的“猫”

gcc -shared -I /usr/lib/jvm/java-6-openjdk/include -I /usr/lib/jvm/java-6-sun-openjdk/include/linux -I /usr/include creatUser.c -o libuser.so

当然 路径是不一样的 


刚开始 我没有添加那个 -fPIC 编译提示  

R_X86_64_32 & could not read symbols: Bad value

于是我又百度 找到了这位的博客 http://blog.csdn.net/eroswang/article/details/4073807

OK 现在 .so 也编译好了 完事具备只欠东风了

现在调用java HelloWorld  就在我认为任务完成的时候 出现了 头疼的情况,无法连接动态库


任何事情都不可能一帆风顺,加油吧。


你可能感兴趣的:(java,jni)