包含核心蓝牙框架的MacOS链接库



我正试图使用Java Native Access(JNA(为CoreBluetooth框架提供Java接口,该框架是MacOS不可或缺的一部分(在我的情况下为12.1版(。

似乎我需要访问MacOS链接库,以便JNA确定可用的接口元素。然而,我似乎找不到为这个框架提供类、方法等的链接库文件。

我查看了以下捆绑包,但没有成功:

  • /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreBluetooth.framework
  • /System/Library/Frameworks/CoreBluetooth.framework
  • /System/Library/PrivateFrameworks/CoreBluetoothUI.framework

我也扫描了/usr/lib的内容,但没有看到任何与CoreBluetooth相关的内容,而且我不想查看系统上每个.dylib文件的内容。

有什么建议我可以在哪里找到这个文件吗?或者有其他方法可以设置到CoreBluetoothJNA接口吗?

您可以像往常一样(5.6或更高版本(在JNA中按名称加载库。

public interface CoreBluetooth extends Library {
CoreBluetooth INSTANCE = Native.load("CoreBluetooth", CoreBluetooth.class);
// mappings
}

但是,在macOS11或更高版本的文件系统中找不到它。来自macOS Big Sur 11.0.1发行说明:

macOS Big Sur 11.0.1中的新增功能,该系统附带了所有系统提供的库的内置动态链接器缓存。作为此更改的一部分,动态库的副本不再存在于文件系统中。试图通过在路径中查找文件或枚举目录来检查动态库是否存在的代码将失败。相反,通过尝试dlopen((路径来检查库是否存在,这将正确地检查缓存中的库。

JNA5.6已更新为使用此新行为。

也就是说,我的系统上有一个框架的副本,或者至少是头文件,路径如下:

/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/CoreBluetooth.framework/

这对于加载到JNA中没有用处,但如果在线文档不足,它确实会提供头文件。我不知道为什么你自己的命令行工具路径中没有它,也不知道我的安装与你的有什么不同。

最新更新