java jni in ubuntu(1)

让人想犯罪 __ 提交于 2019-12-01 02:01:50

初次在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");//文件全路径

最后调用成功.


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!