初次在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
最後調用成功. 編譯