ubuntu下使用JNI Java调用C++的例子

TestJNI.java

 1 public class TestJNI {
 2
 3     static{
 4         System.load("/home/buyizhiyou/workspace/JNI/src/libTestJNI.so");//注意此处加载.so文件
 5     }
 6     public native String test(String inp);//此处需要声明
 7
 8     public static void main(String[] args){
 9         TestJNI j=new TestJNI();
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 <jni.h>
/* 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<iostream>
using namespace std;
JNIEXPORT jstring JNICALL Java_TestJNI_test(JNIEnv * env, jobject, jstring inp)
{
        char* s = (char*)env->GetStringUTFChars(inp, NULL);
        cout<<s<<endl;
        jstring ret = env->NewStringUTF("return");
        return ret;
}

编译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执行即可。

原文地址:https://www.cnblogs.com/buyizhiyou/p/10858677.html

时间: 2024-11-12 22:36:01

ubuntu下使用JNI Java调用C++的例子的相关文章

11.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案。

<span style="font-family: Arial, Helvetica, sans-serif;">步骤一:导入JniHelper.h头文件.</span> #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "JniHelper.h" #endif: 此时会遇到JniHelper.h头文件无法找到的问题,需要添加附加包含目录即可解决问题.具体操作步骤如下:右击项目-

cocos2d 中使用jni Java 调用 C++ 方法

1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件,放在安卓目录下的libs/armeabi 下,然后java会load进来,这步我们不用做了,因为cocos2d已经帮我们做好了. package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public native

Ubuntu下安装了java但启动eclipse报错说没装java

参考资料:http://blog.csdn.net/happyteafriends/article/details/8290950 一.问题 在Ubuntu下安装了java并在~/.bashrc配置了环境变量,在终端可运行java等命令,但启动eclipse报错说缺少jre或jdk: ”a java runtime environment jre or java development kit jdk....“ 二.解决 在在/etc/environment里补充上jdk bin的路径即可. 三

ubuntu 下安装eclipse &amp;java环境配置

前面有一篇的博客写的是ubuntu下安装eclipse和java环境的配置,当时是安装网上的攻略进行的 ,当然也是可以成功的. 最近把那台电脑送人了 ,只好在自己的这台电脑上重新安装一次了 ,唯一欣慰的是eclipse和jdk  以及ubuntu版本都有所更新,这次也用了其他的方式进行的安装配置 第一步下载 这里要下载eclipse 和jdk 最新版本的jdk已经到了1.8.0_05 ,eclipse也升级到了luna   ubuntu用的是14.4 eclipse  :http://www.e

[编程菜谱]如何在Ubuntu下编译链接最简单的curl例子

简介:有点时间没有在Linux环境下战斗了,刚好需要研究一下curl的API使用,试图编译链接了一个最简单的curl例子,发现了很多问题,最后决定把过程记录下来,以防止未来再犯类似的简单错误,如果能帮助到某位过客,也算是幸事! 食材: Ubuntu 12.04 64-bit 安装了基本的gcc.g++.make,恕不赘述 simple.c 一个最最简单的官网curl的c实例,万丈高楼平地起嘛 步骤: 1. 首先要安装curl的开发环境 sudo apt-get install libcurl4-

JNI java调用动态链接库dll

现在做的项目中就用到了JNI调用c语言实现的访问设备的dll文件,在此之前对JNI是一窍不通哈,只听说过JNA链接dll,但只是一个了解. JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C C++编写的代码交互. 理论不多说,还是看java链接dll具体操作吧..如下: 以下实例为java中调用connection.dll文件中的 open()方法. 1,java方 1)装载dll文件 有两种方式System.load();和System.lo

[JNI] Java 调用 C++ dll

首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Java 调用 C++  dll是怎么实现的吧! 1.首先用Java代码制作接口层 package NEU.SOFT; public class NEUdll { public NEUdll() { } //供Java调用的本地代码 public native char[] Descrypt(boolea

Cocos2dx下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案

情况一:JniHelper.h头文件无法找到 方法:需要添加附加包含目录即可解决问题.具体操作步骤如下:右击项目---->c/c++---->常规---->附加包含目录---->添加JniHelper.h所在的路径即可.此时可能还会遇到找不到jni.h和jni_md.h的问题,解决方案为在%JAVA_HOME%/include/下找到 jni.h,在%JAVA_HOME%/include/win32/下找到jni_md.h,复制到"Visual Studio目录/VC/i

[转]Ubuntu下使用Jni开发例子

http://www.cnblogs.com/zxglive2006/archive/2012/01/15/2323110.html 先用eclipse 创建 Java Project; 然后直接在项目中添加Prompt.java文件,放在default package下(最好不要添加包,否则容易出错). 1. 编写Java文件,在其中声明native方法, 并通过static 语句块加载动态链接库,示例Prompt.java代码如下: class Prompt { private native