JNI with C/C++ Mixture
第一步:写一个使用Native代码的java类 HelloJNICpp.java
public class HelloJNICpp { static { System.loadLibrary("hello"); // hello.dll (Windows) or libhello.so (Unixes) } private native void sayHello(); public static void main(String[] args) { new HelloJNICpp().sayHello(); } }
编译HelloJNICpp.java成HelloJNICpp.class
javac HelloJNICpp.java
第二步: 创建一个C/C++的头文件 HelloJNICpp.h
javah HelloJNICpp
生成的头文件HelloJNICpp.h 包括以下内容
JNIEXPORT void JNICALL java_HelloJNICpp_sayHello(JNIEnv*, jobject);
第三 步:C/C++实现 HelloJNICppImpl.h HelloJNICppImpl.cpp 和HelloJNICpp.c
我们应该实现程序HelloJNICppImpl.h 和HelloJNICppImpl.cpp在C++代码里面,但是实现Java接口在HellJNICp在C里面。
C++ Header - "HelloJNICppImpl.h
"
#ifndef _HELLO_JNI_CPP_IMPL_H #define _HELLO_JNI_CPP_IMPL_H #ifdef __cplusplus extern "C" { #endif void sayHello (); #ifdef __cplusplus } #endif #endif
C++实现 - "HelloJNICppImpl.cpp
"
#include "HelloJNICppImpl.h" #include <iostream> using namespace std; void sayHello () { cout << "Hello World Again!" << endl; return; }
C实现java接口 - "HelloJNICpp.c
"
#include <jni.h> #include "HelloJNICpp.h" #include "HelloJNICppImpl.h" JNIEXPORT void JNICALL Java_HelloJNICpp_sayHello (JNIEnv *env, jobject thisObj) { sayHello(); // invoke C++ function return; }
编译C/C++程序到hello.dll
MinGW GCC in windows >g++ -Wl,--add-stdcall-alias -I"<JAVA_HOME>\include" -I"<JAVA_HOME>\include\win32" -shared -o hello.dll HelloJNICpp.c HelloJNICppImpl.cpp
第四步:运行Java程序
> java HelloJNICpp or > java -Djava.library.path=. HelloJNICpp
相关推荐
Java教程2008-03-14 这篇教程主要涵盖了2008年3月14日时Java编程语言的关键概念和技术。Java是一种广泛使用的面向对象的编程语言,以其跨平台的能力、高效性和安全性而闻名。在这个教程中,我们将深入探讨以下几个...
《Java2 Tutorial-5.0》是一份针对Java 2平台第五版(也称为Java 5.0)的详尽教程,旨在帮助开发者深入理解和掌握Java编程语言的关键概念和技术。这个教程涵盖了广泛的Java编程主题,从基础语法到高级特性,为初学者...
这个"PyQt5-Chinese-tutorial-master 中文翻译"项目是一个专门针对PyQt5的中文教程,对于初学者和有经验的开发者来说都是极其实用的资源。 教程首先可能会介绍PyQt5的基础知识,包括如何安装和配置PyQt5环境,讲解...
SR-IOV and IOMMU/VT-d must be enabled in BIOS intel_iommu=on option must be specified in kernel command line - to check: cat /proc/cmdline - to setup: edit and configure bootloader files (GRUB/GRUB2)
《Java教程》第四版是Java开发者的重要学习资源,它详细介绍了Java编程语言的核心概念和技术。这本书的电子版以CHM(MicrosoftCompiled HTML Help)格式提供,便于在计算机上离线查阅。以下是对这个压缩包中包含的...
OpenCV-Python-Tutorial-master OpenCV-Python-Tutorial-master OpenCV-Python-Tutorial-master‘ opencv的演习源代码和图片
本资源为Cheat Engine 训练教程,本教程将尝试讲解在游戏中作弊的一些基本知识,并帮助你熟悉 Cheat Engine 的使用方法。通过本应用,可以帮助新人快速入门CE的基本操作方法。如查找数据,修改数据等等
本教程的"java-servlets-jsp-tutorial-en.pdf"将详细讲解Servlets、JSP和Structs的使用方法,包括基础概念、配置、开发实践和示例代码,帮助读者掌握这些核心技术。通过学习,开发者将有能力构建复杂的企业级Web应用...
是net-snmp官网上的TUTORIAL-MIB文件,由于官网不太容易登陆,因此贴在这里供大家下载!
spring的安全框架演示demo,这个是简单的,适合初学者
VASP-tutorial-DielectricsRPA.zip资料vasp密度泛函DFT模拟计算态资料文档下载VASP-tutorial-DielectricsRPA.zip资料vasp密度泛函DFT模拟计算态资料文档下载VASP-tutorial-DielectricsRPA.zip资料vasp密度泛函DFT...
这个“jbehave-tutorial-maste”压缩包很可能是JBehave的一个教程项目,旨在帮助用户了解并熟悉JBehave的基本用法和核心概念。 在JBehave中,故事是BDD的核心,它们描述了系统的功能需求,通常以简洁明了的文本形式...
在本项目"uanaoeng-javatutorial-master_php源码_腾讯翻译调用_"中,我们关注的主要焦点是PHP编程语言与腾讯翻译API的整合应用。这个项目旨在展示如何利用PHP来调用腾讯的翻译服务,从而实现跨语言的信息处理。我们...
版权所有2018 Kurento。根据Apache2.0许可证授权。
sentinel-tutorial-master.zipsentinel-tutorial-master.zipsentinel-tutorial-master.zipsentinel-tutorial-master.zipsentinel-tutorial-master.zipsentinel-tutorial-master.zip
IntelliJ IDEA,被誉为最优秀的集成开发环境(IDE),是JetBrains公司推出的一款强大的Java开发工具。它以其卓越的代码智能提示、高效的项目管理和丰富的插件支持,深受广大开发者喜爱。在本教程“IntelliJ IDEA ...
该教程“UG936-vivado-tutorial-programming-debugging.pdf”聚焦于Vivado中的编程与调试流程,版本号为2022.2,发布日期为2022年11月16日。Xilinx致力于创建一个包容性的工作环境,因此在产品和相关材料中移除可能...
在这个" Acegi-security-samples-tutorial-1.0.7.zip "压缩包中,包含了一个详细的教程实例,帮助开发者理解并掌握Acegi Security的使用方法。通过将这些示例代码导入到自己的项目并添加注释,我们可以更深入地学习...