java调用c++的jni_ubuntu下使用JNI Java调用C++的例子

TestJNI.java

1 public classTestJNI {2

3 static{4 System.load("/home/buyizhiyou/workspace/JNI/src/libTestJNI.so");//注意此处加载.so文件5 }6 public nativeString test(String inp);//此处需要声明7

8 public static voidmain(String[] args){9 TestJNI j=newTestJNI();10 String ret=j.test("inputs");11 System.out.println(ret);12 }13 }

javah -jni TestJNI 生成TestJNI.h,这个文件不用自己改,如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class TestJNI */

#ifndef _Included_TestJNI

#define _Included_TestJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: TestJNI

* Method: test

* Signature: (Ljava/lang/String;)Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_TestJNI_test

(JNIEnv *, jobject, jstring);

#ifdef __cplusplus

}

#endif

#endif

然后用c++实现JNICALL Java_TestJNI_test方法,注意c++类型和JNI类型的转换:

#include "TestJNI.h"#include

using namespacestd;

JNIEXPORT jstring JNICALL Java_TestJNI_test(JNIEnv*env, jobject, jstring inp)

{char* s = (char*)env->GetStringUTFChars(inp, NULL);

cout<

jstring ret= env->NewStringUTF("return");returnret;

}

编译c++成.so文件,注意指定头文件路径,因为需要用到jni.h, jni_md.h:

g++ TestJNI.cpp -I/usr/lib/jvm/java-8-oracle/include/linux/ -I/usr/lib/jvm/java-8-oracle/include/ -fPIC -shared -o libTestJNI.so

然后javac TestJNI.java编译,java TestJNI执行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值