7

我在 mac 上玩了一下 Java 7 update 9,发现了一件有趣的事情。

我刚刚运行了一个简单的 Java 程序JFrame,并使用lldb. 然后我检查了这个 Java 程序加载的库,我看到了:

"/System/Library/Frameworks/JavaVM.framework/JavaVM"在里面。

所以我有两个问题:

  1. 这个 JavaVM 为 Java 7 做了什么?我认为 mac 上的 Java 7 是自洽的,就像它在 Windows 和 Linux 上的相应版本一样。通过使用“nm”,我可以看到这个 JavaVM 定义了许多函数,例如 JNI_CreateJavaVM,它也在 libjvm.dylib 中定义。

  2. 对于 Java 7 的 JNI 库,我应该链接到什么?还是JavaVM.framework?我可以链接到位于下面的库吗

    /Library/Java/JavaVirualMachine/jdk.1.7.0 直接。

任何帮助都感激不尽。

4

2 回答 2

0

对于第一部分,JavaVM 指向 Mac JavaVM (1.6)。仔细查看 Info.plist 文件,Mac Java 似乎支持 JNI(除其他外),而 Oracle Java 仅支持 CommandLine。看起来你不能在 Mac OS X 上链接到 1.7。还有很多相关的问题。

要查找支持 JNI 的 JVM,请执行以下操作:

/usr/libexec/java_home -t JNI

这可能应该返回 1.6.0 JDK。您可以使用参数运行它-V以获取可用 JVM 的完整列表。

于 2013-12-15T00:44:05.190 回答
0

Mac 上的 Oracle JDK 被宣传为与其他地方的 Oracle JDK 一样。它有命令、头文件和库。您应该能够像在其他地方一样使用 JDK 的内容。我们通常创建和使用通过 LoadLibrary 加载的 JNI 库;我无法报告调用界面的个人体验。

于 2013-12-15T02:28:48.927 回答