初次在ubuntu13.04上实验java jni的调用,弄的比较蛋疼,在此记录下. java
先创建一个java工程. ios
贴上java代码 c++
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++工程,切图 ubuntu
将以前生成的c++文件拷贝到工程中 ,因为文件须要引用到jni.h 和jni_md.h两个文件,文件路径包含在/jdk1.6.0_38/include中 spa
为了让cdt编译成功,添加jni.h 和jni_md.h两个文件到工程中.切图 code
发现项目已经再也不报错,新建一个c++文件,实现方法代码以下 get
/* * 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工程中 string
System.load("/home/origin/workspace1/java_jni_test1/src/test1.so");//文件全路径 io
最后调用成功. 编译