从 Java 程序调用 C/C++ 代码_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 从 Java 程序调用 C/C++ 代码

从 Java 程序调用 C/C++ 代码

 2013/10/23 23:53:03  hejiajunsh  程序员俱乐部  我要评论(0)
  • 摘要:概述当无法用Java语言编写整个应用程序时,JNI允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码:希望用更低级、更快的编程语言去实现对时间有严格要求的代码。希望从Java程序访问旧代码或代码库。需要标准Java类库中不支持的依赖于平台的特性。从Java代码调用C/C++的六个步骤从Java程序调用C或C++代码的过程由六个步骤组成。我们将在下面几页中深入讨论每个步骤,但还是先让我们迅速地浏览一下它们。1.编写Java代码。我们将从编写Java类开始,这些类执行三个任务
  • 标签:程序 c++ Java 代码

概述

?

当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码:

希望用更低级、更快的编程语言去实现对时间有严格要求的代码。

?

希望从 Java 程序访问旧代码或代码库。

?

需要标准 Java 类库中不支持的依赖于平台的特性。

?

?

从 Java 代码调用 C/C++ 的六个步骤

?

从 Java 程序调用 C 或 C ++ 代码的过程由六个步骤组成。 我们将在下面几页中深入讨论每个步骤,但还是先让我们迅速地浏览一下它们。

?

?

1.编写 Java 代码。

我们将从编写 Java 类开始,这些类执行三个任务:声明将要调用的本机方法;装入包含本机代码的共享库;然后调用该本机方法。

?

2.编译 Java 代码。

在使用 Java 类之前,必须成功地将它们编译成字节码。

?

3.创建 C/C++ 头文件

C/C++ 头文件将声明想要调用的本机函数说明。然后,这个头文件与 C/C++ 函数实现(请参阅步骤 4)一起来创建共享库(请参阅步骤 5)。

?

4.编写 C/C++ 代码。

这一步实现 C 或 C++ 源代码文件中的函数。C/C++ 源文件必须包含步骤 3 中创建的头文件。

?

5.创建共享库文件。

从步骤 4 中创建的 C 源代码文件来创建共享库文件。

?

6.运行 Java 程序。

运行该代码,并查看它是否有用。我们还将讨论一些用于解决常见错误的技巧。

?

?

故障排除

?

当使用 JNI 从 Java 程序访问本机代码时,您会遇到许多问题。您会遇到的三个最常见的错误是:

?

无法找到动态链接。

它所产生的错误消息是:java.lang.UnsatisfiedLinkError。这通常指无法找到共享库,或者无法找到共享库内特定的本机方法。

?

无法找到共享库文件。

当用 System.loadLibrary(String libname) 方法(参数是文件名)装入库文件时,请确保文件名拼写正确以及没有指定扩展名。还有,确保库文件的位置在类路径中,从而确保 JVM 可以访问该库文件。

?

无法找到具有指定说明的方法。

确保您的 C/C++ 函数实现拥有与头文件中的函数说明相同的说明。

?

?

结束语

?

从 Java 调用 C 或 C++ 本机代码(虽然不简单)是 Java 平台中一种良好集成的功能。虽然 JNI 支持 C 和 C++,但 C++ 接口更清晰一些并且通常比 C 接口更可取。

正如您已经看到的,调用 C 或 C++ 本机代码需要赋予函数特殊的名称,并创建共享库文件。当利用现有代码库时,更改代码通常是不可取的。要避免这一点,在 C++ 中,通常创建代理代码或代理类,它们有专门的 JNI 所需的命名函数。然后,这些函数可以调用底层库函数,这些库函数的说明和实现保持不变。

?

?详见:

http://www.ibm.com/developerworks/cn/education/java/j-jni/index.html

http://www.ibm.com/developerworks/cn/education/java/j-jni/section2.html

上一篇: 关于《Java那么健壮,怎么会挂?》的1000条回复 下一篇: 没有下一篇了!
发表评论
用户名: 匿名