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

标签 java macos kernel jna

我正在尝试编写一个 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/

相关文章:

macos - 为什么在 Mac OS Lion 中安装 Oracle JDK 7 后无法识别 java

c++ - 2个或更多进程如何与键盘交互?

c - 劫持系统调用

java - 如何修复 lingpipe java 错误

c - 错误代码如何返回给用户程序?

java - 使用LinkedHashMap实现LRU缓存

java - 创建条目列表并使每个条目都可点击

java - iText 5.5.1 中的 Table.keepRowsTogether() 似乎无法正常工作

java - 无法打开 Jar 文件

excel - `Application.StatusBar` 是否在 Office 2011 中工作?