java jni in ubuntu(1)

初次在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

最後調用成功. 編譯

相關文章
相關標籤/搜索