我正在尝试编写一个 Java 类来访问一些 Mac OS X 内存统计信息。我有一个工作实现来解析从 vm_stat 返回的字符串。但是,我正在尝试使用 JNA 访问 native 代码。
我已经深入研究了 vm_stat 源代码,足以将 host_statistics64() 识别为我需要调用的函数,但我似乎无法访问执行该函数的库/框架。头文件位于/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 - 如何使用 JNA 访问 Mac OS X 内核框架 (mach),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317884/