设为首页 加入收藏

TOP

25.2.5 通过JNI混合Java和C++(2)
2013-10-07 15:36:00 来源: 作者: 【 】 浏览:69
Tags:25.2.5 通过 JNI 混合 Java

25.2.5  通过JNI混合Java和C++(www.cppentry.com)(2)

然后使用javah(作者喜欢把这个程序读成jav-AHH!)程序为这个原始方法创建一个头文件:

  1. javah HelloCpp 

javah运行完毕后,您会发现一个名为HelloCpp.h的文件,这是一个可以完全正常工作(只不过有点丑陋)的C/C++(www.cppentry.com)头文件。在这个头文件内是一个名为Java_HelloCpp_callCpp()的函数的C函数定义。您的C + +程序需要实现这个功能。完整原型如下:
  1. JNIEXPORT void JNICALL Java_HelloCpp_callCpp(JNIEnv* env, jobject javaobj); 

这个函数的C++(www.cppentry.com)实现可以充分利用C++(www.cppentry.com)语言的特性。这个例子通过C++(www.cppentry.com)输出一些文本。首先,您需要包含jni.h头文件和javah创建的HellpCpp.h文件。您还需要包括任何您需要使用的C或C++(www.cppentry.com)头文件:
  1. #include <jni.h> 
  2. #include "HelloCpp.h"  
  3. #include <iostream> 
  4. 代码取自JNI\HelloCpp.cpp 

按照正常的方式编写C++(www.cppentry.com)函数。这个函数的参数允许和Java环境以及调用这个原生代码的对象交互。这些内容超出了这个例子的范围。
  1. JNIEXPORT void JNICALL Java_HelloCpp_callCpp(JNIEnv* env, jobject javaobj)  
  2. {  
  3. std::cout << "Hello from C++(www.cppentry.com)!" << std::endl;  
  4. }  
  5.  
  6. 代码取自JNI\HelloCpp.cpp  

将这段代码编译为一个库取决于您的环境,但您肯定要调整一下编译器的设置以包含JNI头文件。如果在Linux上使用GCC编译器,编译命令可能看起来像这样:
  1. g++ -shared -I/usr/java/jdk/include/ -I/usr/java/jdk/include/linux HelloCpp.cpp \  
  2. -o hellocpp.so  

从编译器的输出是由Java程序使用的库。只要这个共享库在Java类路径的某个位置,您就可以正常执行Java程序:
  1. java HelloCpp 

应该可以看到以下结果:
  1. Hello from Java!  
  2. Hello from C++(www.cppentry.com)! 

当然,这个例子只介绍了JNI的冰山一角。您可以通过JNI与操作系统相关的特性或硬件驱动程序交互。有关JNI的完整内容,请参阅Java教材。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇25.2.6 混合C++使用Perl和shell脚.. 下一篇25.2.5 通过JNI混合Java和C++(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)