Java调用C++库文件例子

原创 2016年05月30日 21:34:03

Java调用C++库文件例子

本例使用JNI(Java Native Interface)技术调用C++库文件
* 系统: Mac OS
* IDE: Eclipse

  • 创建Java工程命名为jniTest,新建一个类,名为MyDLL.java,代码如下:
public class MyDLL {
    static{
        System.loadLibrary("JavaCallCpp");
    }
    //定义一个native方法
    public native int addition(int a, int b);
}

eclipse保存后将在项目创建路径的bin目录下生成对应的.class文件

  • 进入.class文件所在目录,在命令行里输入 javah -cp /Users/chenliang/Works/Develop/MyProject/WorkSpace/jniTest/bin/ com.chen.jni.MyDLL,将在当前目录生成.class文件对应的.h文件(C++头文件). *注意:-cp后的路径和类名(类名前必须包含包名)*
  • 在相同目录下创建.cpp文件,命名为MyDLL.cpp,代码如下:
#include "com_chen_jni_MyDLL.h"

JNIEXPORT jint JNICALL Java_com_chen_jni_MyDLL_addition(JNIEnv *env, jobject object, jint a, jint b){
    return a + b;
}
  • 命令行在当前目录输入 g++ -I /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include -I /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin -shared -o JavaCallCpp.dylib JavaCallCpp.cpp ,两个 -I 是指定JDK目录下的jni.h和jni_md.h文件路径, -shared 为生成共享库, -o 为指定库文件名为MyDLL.dylib(Mac OS下为 lib文件名.dylib,Windows下为 文件名.dll,linux下为 文件名.so).

  • 将MyDLL.dylib文件拷贝到jniTest java工程根目录下,并新建一个类,名为test.java,代码如下:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyDLL mydll = new MyDLL();
        //打印出3和4相加的结果
        System.out.println(mydll.addition(3, 4));
    }

}
  • 在eclipse里右键点击jniTest工程,选择 Build Path - Configure Build Path... - 展开 JRE System Library - Native library location ,点击右边的 Edit... ,将dylib文件路径输入
  • 运行Test,显示结果为7,调用动态库中的addition方法成功!

Linux-(C)文件读写实例(系统调用/标准I/O库)

从实现的角度:系统调用直接对文件和设备进行访问和控制的的一组底层接口, 而标准I/O库为地城I/O调用提供了一个通用的接口,系统调用直接跟底层打交道,系统调用移植性远不如标准I/O库好。 从性能的角度...
  • qq_33850438
  • qq_33850438
  • 2016年07月24日 14:27
  • 3102

Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)

看了网上几个主要的教程,都会导致出现各种错误,对于初学者来说会造成一些困扰。在这里详细记录一下JNI调用过程。本案例的基本配置:Eclipse+VS2015,Win10  64位 (1)编写Java ...
  • whustyle
  • whustyle
  • 2015年10月14日 14:35
  • 1868

ICE简介及C++程序例子

一、ICE简介: 1、ICE是什么?  ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面...
  • wqc19920906
  • wqc19920906
  • 2016年01月13日 20:25
  • 3931

C++中调用C语言库文件

我们都知道C++语言兼容C语言,那么C++调用C语言库,为什么为什么需要 extern "C"的帮助? 答案就是C++语言为了支持重构(重构的特征:相同的范围、相同的名字、不同的参数),在编译时对...
  • u011392772
  • u011392772
  • 2015年05月21日 09:52
  • 514

XCode与C++/C混合编程与库文件的创建和调用

  • 2014年04月29日 12:54
  • 2.71MB
  • 下载

java中调用C/C++编写的生成的动态连接库dll文件接口的简单例子

1、首先用java编写一个简单类 public class Hello { public native void sayHello(); static { System.loadLibrar...
  • hongya1109110121
  • hongya1109110121
  • 2014年03月05日 17:44
  • 2110

求大神解决 C++库文件调用问题 (C++ and matlab联合编程)

我机器是64位的,matlab2012a也是64位的。在c++工程里面,系统是win32的时候,出现下面的错误(这个程序是要读matlab中.mat文件的) 要用到libmat.lib以及libmx...
  • ppkynx
  • ppkynx
  • 2013年08月16日 09:29
  • 606

java调用kettle中的资源库文件(job\trans)

先截图看看我的kettle中的目录结构
  • hubeilihao
  • hubeilihao
  • 2014年06月05日 17:44
  • 1393

关于如何使用ST官方库文件中的例子程序的补充

之前写过一篇文章,如何使用ST官方库文件中的例子程序,后来在实验中发现有些问题,这里再做一下补充 按照我之前的文章,把模板程序建立好之后还需要在Keil uVision4中做一些设置,具体设置如下:...
  • thebestleo
  • thebestleo
  • 2015年04月01日 11:43
  • 406

如何使用ST官方库文件中的例子程序

前面我们做了ST官方库文件的分析及使用说明,本文将介绍在官方库文件建立的模板工程下使用ST官方库文件中的例程方法 1、首先找到我们要用到的ST官方库文件中的例程文件(以GPIO为例) 文件目录为STM...
  • thebestleo
  • thebestleo
  • 2015年03月09日 15:44
  • 3237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java调用C++库文件例子
举报原因:
原因补充:

(最多只允许输入30个字)