如何使用 JNA 访问 Mac OS X 内核框架 (mach)

How to access Mac OS X Kernel framework (mach) using JNA

我正在尝试编写 Java class 来访问一些 Mac OS X 内存统计信息。我有一个工作实现来解析从 vm_stat 返回的字符串。但是,我正在尝试使用 JNA 访问本机代码。

我已经仔细研究了 vm_stat 源代码,足以将 host_statistics64() 确定为我需要调用的函数,但我似乎无法找到 library/framework 执行那个。头文件位于 /System/Library/Frameworks/Kernel.framework 下。但是,与该目录中几乎所有其他框架不同的是,没有可执行文件,因此访问该框架的 JNA 代码会抛出 UnsatisfiedLinkError(未找到图像)。

这是我用来尝试访问图书馆的代码:

public interface Kernel extends Library {

    Kernel INSTANCE = (Kernel) Native.loadLibrary("Kernel", Kernel.class);

    // ... other code ...
}

该代码适用于目录中随机选择的其他框架(例如,ApplicationServices.framework 等),因为所有这些似乎在其目录结构中都有一个二进制可执行文件。除了内核。

我花了几个小时 Google 试图寻找解决方案,但没有成功。有什么建议吗?

我找到了 运行 的命令,它告诉我加载了哪些库。对于 Mac OS X,我使用的命令是:

otool -L /usr/bin/vm_stat

这产生了以下输出:

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

所以这很有效:

SystemB INSTANCE = (SystemB) Native.loadLibrary("System.B",SystemB.class);

(等效的 linux 命令是 ldd。)