JNI是平台依赖的吗?

时间:2012-06-29 08:10:42

标签: java c java-native-interface

我使用Java和JNI for Linux编写简单的“Hello World”程序,如果我正确使用JNI,则必须为每个平台编译共享库(例如,* .so用于Linux,* .dll用于Windows等)将它放在你的* .jar文件附近并编写一个脚本来正确执行它(例如java -jar -Djava.library.path = .your_app.jar)。这让我有点难过,因为我选择Java因为平台的相互依赖性。当然,使用Windows和Mac构建一个完全相同的lib并不是什么大问题,但是我第一次想到JNI就像一个银弹,它将Java的平台独立性和C的速度结合在一个.jar文件中。

也许我假设有问题并且有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

Java 主要与平台无关,JNI是 BIG 例外......

答案 1 :(得分:2)

JNI = Java 原生接口。 Native =平台相关。 JNI是Java的可选和非常专业的部分,您不必将其用于任何Java编码。 JNI旨在用于绝对无法在JVM中完成的隔离任务。不是出于速度原因,而是用于访问本机(OS级别)资源/接口或第三方本机(非JVM)单片库。使用JNI获得“更好的速度”并且实际上期望差异显着,这表明您应该完全使用不同的工具。

答案 2 :(得分:1)

您必须为您要定位的每个平台提供不同版本的本机库。所以,是的,在使用JNI时你会失去平台的可移植性。

虽然我不知道您的确切问题,但我会评估本机代码是否因性能原因而非常重要。在我看来,Java并不像有时讨论的那么慢。