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 ...
随机推荐
- OC学习14——谓词
一.谓词的基本概念与使用 1.谓词(NSPredicate)用于定义一个逻辑条件,通过该条件可执行搜索或内存中的过滤操作.上一篇文章中介绍的集合都提供了使用谓词对集合进行过滤的方法.OC中的谓词操作是 ...
- 7 Series GTP IP核使用总结 IP核配置篇
FPGA内嵌收发器相当于以太网中的PHY芯片,但更灵活更高效,线速率也在随着FPGA芯片的发展升级.本文对7系列FPGA内部高速收发器GTP IP核的配置和使用做些简单的总结,以备后续回顾重用.本文是 ...
- sed 命令替换字符串
sed -i 's/13/15/g' `grep 13 -rl 目录` -i 表示替换 -r 表示搜索子目录 -l 显示替换名
- bat修改密码
@echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...
- Linux第五节随笔 /file / vim / suid /sgid sbit
三期第四讲1.查询文件类型与文件位置命令 file 作用:查看文件类型(linux下的文件类型不以后缀名区分) 语法举例: [root@web01 ~]# file passwd passwd: AS ...
- Linux第三节
三期第三讲1.ls --help:查看帮助(man 命令) :ls -l: 长格式形式: ls -i: 文件的inode节点: ls -t: 按修改时间排序: ls -a :显示隐藏文件: 2.文件管 ...
- Node.js平台的一些使用总结
Node.js的安装 菜鸟教程 npm -v查看npm的版本. npm更新 npm官网 npm权限问题 由于npm经常会因为权限问题,不能全局安装模块,所以解决办法如下: npm官网 npm切换淘宝源 ...
- C/C++调用Golang 一
C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windo ...
- 优化设计提高sql类数据库的性能
前言 在一个项目中,技术的统一性是最重要的,数据库的设计则是重点中的重点.NoSQL 是目前最流行的数据库,但是其实用性和功能性远不如sql数据库. 实际很多SQL数据库被诟病的性能问题大多是源于程序 ...
- Python 项目实践三(Web应用程序)第三篇
接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...