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

最后调用成功. 编译

相关文章
相关标签/搜索