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方法成功!
版权声明:

相关文章推荐

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

1、首先用java编写一个简单类 public class Hello { public native void sayHello(); static { System.loadLibrar...

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

先截图看看我的kettle中的目录结构

Java 调用现有的在Solaris平台上的库文件

现在网络上有比较多的java使用JNI调用C/C++ 的使用方法,大部分都是大同小异,大部分都是下面的步骤1,2,3步. 1.先是写普通的Java类,静态的加载库文件,编写需要调用的本地方法调用。 ...

基于libmodbus库文件和例子

  • 2014-09-29 14:36
  • 493KB
  • 下载

工作中常用到的linux命令二 c++系统环境配置 动态库文件路径的加载

大家都知道,c++程序执行完成以后会生成二进制的可执行文件,该可执行文件可以部署到开发机上,一些服务就可以搭建起来了,但是在搭建的过程中,会出现很多小问题,这里就持续介绍一些常见的小问题    1....

C++生成和使用库文件

介绍c++中静态库和动态库的生成和使用。

C/C++库文件的生成与使用

为什么要用库文件? 为了保密(机密性) 提高代码重用率,提升可扩展性(灵活性) 方便coders间的分工与合作,提高开发效率(高效开发) 保密的同时,清晰的结构也增加了可读性(知道接口作用即可)(可读...

c++ 查看库文件符号表

做个笔记: linux 下查看符号表工具:nm 操作如下:   linux的nm命令可以一个文件中的符号列表,列出以上代码Gcc -c编译出的a.o(a.a a.so)可以通过nm命令来查...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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