0

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

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

4

3 回答 3

2

Java主要是独立于平台的,JNI是一个例外......

于 2012-06-29T08:17:17.813 回答
2

JNI = Java原生接口。本机 = 平台相关。JNI 是 Java 的可选且非常专业的部分,您不必将它用于任何 Java 编码。JNI 旨在用于在 JVM 中绝对无法完成的孤立任务。不是出于速度原因,而是为了访问本机(操作系统级别)资源/接口,或第 3 方本机(非 JVM)单体库。使用 JNI 以获得“更好的速度”并且实际上期望差异很大,这表明您可能应该完全使用不同的工具。

于 2012-06-29T08:58:31.447 回答
1

您确实必须为您所针对的每个平台提供不同版本的本机库。所以,是的,在某种程度上,您在使用 JNI 时会失去平台可移植性。

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

于 2012-06-29T08:18:11.183 回答