java使用jni调用c++动态库函数.

步骤:

1.编写java测试代码如下:

 public class CallNativeDemo {
native void func(); native double add(double a, double b); public static void main(String[] args) {
System.loadLibrary("Main");
CallNativeDemo callNativeDemo = new CallNativeDemo();
callNativeDemo.func();
System.out.println(callNativeDemo.add(1,2));
}
}

2. 使用javac 对代码进行编译:

javac CallNativeDemo.java

3.使用javah 生成CallNativeDemo.h头文件.

javah -cp . CallNativeDemo

生成的代码如下:

 /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class CallNativeDemo */ #ifndef _Included_CallNativeDemo
#define _Included_CallNativeDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: CallNativeDemo
* Method: func
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_CallNativeDemo_func
(JNIEnv *, jobject); /*
* Class: CallNativeDemo
* Method: add
* Signature: (DD)D
*/
JNIEXPORT jdouble JNICALL Java_CallNativeDemo_add
(JNIEnv *, jobject, jdouble, jdouble); #ifdef __cplusplus
}
#endif
#endif

4.编写Main.cpp文件,如果使用的是.c文件,去掉extern "C"{}

 #include <jni.h>
#include <stdio.h>
/*
* Class: CallNativeDemo
* Method: func
* Signature: ()V
*/
extern "C"{
JNIEXPORT void JNICALL Java_CallNativeDemo_func
(JNIEnv *env, jobject job){
printf("hello world! by java and C++\n");
} /*
* Class: CallNativeDemo
* Method: add
* Signature: (II)V
*/
JNIEXPORT jdouble JNICALL Java_CallNativeDemo_add
(JNIEnv *env, jobject job, jdouble a, jdouble b){ return a+b;
}
}

5.使用locate/find 查询jdk位置.

locate jdk

6.编写Makefile文件.

 #makefile

 .SUFFIXES: .o.cpp
.PHONY: clean
.PHONY: start JDKLIB =/home/gongxijun/java/jdk1.7.0_40/include
CC =g++
SRC =Main.cpp
OBJS =$(SRC:.cpp =.o)
OS = libMain.so .PHONY: start
start: $(OBJS)
$(CC) -shared -fpic -I $(JDKLIB) -I $(JDKLIB)/linux -o $(OS) $(OBJS)
.o.cpp:$(SRC)
$(CC) -g -Wall $@ -c $<
.PHONY: clean
clean:
rm -f $(OBJS)

7.使用make 编译Makefile文件,生成.so动态库.

make Makefile 或者直接 make

8.运行java程序.

java -cp . -Djava.library.path=. CallNativeDemo

8.1结果如下:

hello world! by java and C++
3.0

  

java调用c++函数的简单笔记的更多相关文章

  1. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...

  2. java调用matlab函数

    如何将实验结果在matlab中可视化呢,下面使用java语言编程,调用matlab中的函数: 本人安装的是Matlab7.11.0 (R2010a)和 Eclipse 4.2 : 1)首先设置环境变量 ...

  3. Linux平台下Java调用C函数

    JNI是Java native interface的简写,可以译作Java原生接口.Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个 福音. 使用JNI也是 ...

  4. Java 调用 Javascript 函数的范例

    在Java 7 以后,可以在Java代码中调用javascript中的函数,请看下面的例子: package com.lee; import java.io.FileNotFoundException ...

  5. Java调用C函数

    一.关于JNI JNI( Java Native Interface )主要是实现Java和C/C++语言之间的通信. Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOW ...

  6. java调用c/c++代码简单实现以及遇见的坑

    以下内容均来自互联网,感谢你们的分享,我只是使用的时候看这方便,可以称呼我“搬运工” 如有不合适的地方请与我联系,我会及时改正 首先你可能会遇见以下错误 第一个错误是你在vs编译器没有选择使用rele ...

  7. Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记

    Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函 ...

  8. java调用webservice,比较简单方便的方法。

    首先,请同学们自行了解webservice的基础知识. 个人理解,webservice约等于使用http+xml技术进行跨平台的数据交互. http和xml我们都很熟悉了,把他们两个组合到一起就是we ...

  9. java调用js函数

    问题:js函数可能有多个,之间有相互调用关系,有jquery jar包 org.mozilla.javascript-1.7.2 js   envjs-1.2.js java代码 import jav ...

随机推荐

  1. org.elasticsearch.transport.ReceiveTimeoutTransportException[cluster:monitor/nodes/liveness] request_id [31] timed out after [5000ms]

    ES连接超时,异常信息 2017-09-07 10:42:45.042 [elasticsearch[Bantam][transport_client_worker][T#17]{New I/O wo ...

  2. .NET+Ajax+ashx 实现Echarts图表动态交互

    前言: 使用Echarts展示图表效果,在这里只做了四种案例:折线.柱状.圆形.雷达.当初是一位朋友用到Echarts展示数据,他没有太多时间弄,所以我就帮他搞出来,当初刚接触的时候也是一头雾水,不知 ...

  3. Python 项目实践一(外星人入侵小游戏)第五篇

    接着上节的继续学习,在本章中,我们将结束游戏<外星人入侵>的开发.我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏.我们还将修改这个游戏,使其在玩家的等级提高时加快 ...

  4. 《程序员修炼之道:从小工到专家》【PDF】下载

    <程序员修炼之道:从小工到专家>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196340 内容简介 <程序员修炼之道> ...

  5. xCode8以及iOS10 的新特性

    其他:ios10中 适配问题(1.系统判断方法失效:2.隐私数据的访问问题:3.UIColor 问题4.真彩色的显示5.ATS问题6.UIStatusBar问题7.UITextField8.UserN ...

  6. 在Ubuntu14.04下安装 labelImg (标数据用)

    安装 SIP 下载 SIP 并解压 : $ sudo python configure.py $ make $ sudo make install 安装 依赖库 $  sudo apt-get ins ...

  7. golang 如何验证struct字段的数据格式

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/125 假设我们有如下结构体: type User struct ...

  8. bzoj 2119: 股市的预测

    Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时 ...

  9. 改造 Combo Select支持服务器端模糊搜索

    项目中使用了 combo select,为缺省的select增加模糊搜索的功能,一直运行得很好. 1    碰到的问题 但最近碰到一个大数据量的select:初始化加载的数据项有2000多个.我们采用 ...

  10. w 命令详解

    作用: 用于显示已经登录系统的用户列表, 并显示用户正在执行的指令. 执行这个命令可得知目前登入系统的用户有哪些人, 以及他们正在执行的程序.  单独执行w 命令会显示所有的用户, 您也可指定用户名称 ...