初次在ubuntu13.04上实验java jni的调用,弄的比较蛋疼,在此记录下.
先建立一个java工程.
贴上java代码
public class JNITest1 {
static{
System.load("/home/origin/workspace1/java_jni_test1/src/test1.so");
// System.setProperty("java.library.path",".");
// System.out.println(System.getProperty("java.library.path"));
// System.loadLibrary("test1");
}
public native String sayJNItest(String name);//调用c++部分
public static void main(String[] args) {
JNITest1 jniTest1 = new JNITest1();
String str = jniTest1.sayJNItest("jni test");
System.out.println(str);
// System.out.println(System.getProperty("java.library.path"));
}
}
到工程bin目录下执行javah -jni JNITest1 生成c++文件
2.建立一个c++工程,切图
将之前生成的c++文件拷贝到工程中 ,由于文件需要引用到jni.h 和jni_md.h两个文件,文件路径包含在/jdk1.6.0_38/include中
为了让cdt编译成功,添加jni.h 和jni_md.h两个文件到工程中.切图
发现项目已经不再报错,新建一个c++文件,实现方法代码如下
/*
* Test.cpp
*
* Created on: 2013-5-26
* Author: origin
*/
#include <jni.h>
#include "JNITest1.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
jstring JNICALL Java_JNITest1_sayJNItest
(JNIEnv * env, jobject obj, jstring str){
return str;
};
最后编译该项目,发现编译不通过。提示缺少 编译参数 -fPIC, 添加编译参数切图
最后编译通过,生成so文件,拷贝so文件到java工程中
System.load("/home/origin/workspace1/java_jni_test1/src/test1.so");//文件全路径
最后调用成功.
来源:oschina
链接:https://my.oschina.net/u/141149/blog/133577