如何使用 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。)
我正在尝试编写 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。)