java调用c++函数的简单笔记
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++函数的简单笔记的更多相关文章
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
- java调用matlab函数
如何将实验结果在matlab中可视化呢,下面使用java语言编程,调用matlab中的函数: 本人安装的是Matlab7.11.0 (R2010a)和 Eclipse 4.2 : 1)首先设置环境变量 ...
- Linux平台下Java调用C函数
JNI是Java native interface的简写,可以译作Java原生接口.Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个 福音. 使用JNI也是 ...
- Java 调用 Javascript 函数的范例
在Java 7 以后,可以在Java代码中调用javascript中的函数,请看下面的例子: package com.lee; import java.io.FileNotFoundException ...
- Java调用C函数
一.关于JNI JNI( Java Native Interface )主要是实现Java和C/C++语言之间的通信. Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOW ...
- java调用c/c++代码简单实现以及遇见的坑
以下内容均来自互联网,感谢你们的分享,我只是使用的时候看这方便,可以称呼我“搬运工” 如有不合适的地方请与我联系,我会及时改正 首先你可能会遇见以下错误 第一个错误是你在vs编译器没有选择使用rele ...
- Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记
Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函 ...
- java调用webservice,比较简单方便的方法。
首先,请同学们自行了解webservice的基础知识. 个人理解,webservice约等于使用http+xml技术进行跨平台的数据交互. http和xml我们都很熟悉了,把他们两个组合到一起就是we ...
- java调用js函数
问题:js函数可能有多个,之间有相互调用关系,有jquery jar包 org.mozilla.javascript-1.7.2 js envjs-1.2.js java代码 import jav ...
随机推荐
- 导入maven项目时出现 Version of Spring Facet could not be detected. 解决方法
问题出现在: 导入maven项目的时候,其中,我的这个maven项目是由Spring,Struts2,Mybatis搭建的. 问题截图: 即Spring的版本不能被检测到.此时需要做的就是找到spr ...
- 八.利用springAMQP实现异步消息队列的日志管理
经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解.俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...
- Object.assign()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign 说明 Ob ...
- JavaWeb之ssm框架整合,用户角色权限管理
SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...
- JavaWeb之数据源连接池(2)---C3P0
我们接着<JavaWeb之数据源连接池(1)---DBCP>继续介绍数据源连接池. 首先,在Web项目的WebContent--->WEB-INF--->lib文件夹中添加C3 ...
- bzoj 4824: [Cqoi2017]老C的键盘
Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...
- bzoj 4310: 跳蚤
Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典 ...
- Thymeleaf引擎支持Multi Prefix
最近团队的一个项目在重构,希望引入Thymeleaf减少页面端的代码复杂性.在重构过程中,发现html文件需要保存在多个不同的目录中,但Thymeleaf缺省的实现不支持这种方式. 1 ...
- 微信小程序+“芝麻小客服”可设自动关注公众号,助力运营闭环
微信小程序全面上线已经接近1年的时间,从最初的"用完即走"理念到2017年总计更新开放60余次的功能创新,微信小程序不一定会爆发下一次的红利,但绝对是微信生态中重要的一环. 芝麻小 ...
- python爬取大众点评
拖了好久的代码 1.首先进入页面确定自己要抓取的数据(我们要抓取的是左侧分类栏-----包括美食.火锅)先爬取第一级分类(美食.婚纱摄影.电影),之后根据第一级链接爬取第二层(火锅).要注意第二级的p ...