java - JavaNativeFoundation.framework 在 Azul 和 Liberica JDK 中没有主要版本——我怎么能告诉 Java 使用它呢?
问题描述
我正在尝试在基于 ARM 的 Mac 上使用本机库,即 M1 处理器。该架构有几个可用的 JVM,例如 Azul 或 Liberica。两者都带有一个JavaNativeFoundation.framework
动态库,这是使用任何 JNI 代码所必需的。但是,框架没有Versions
包含框架主要版本的文件夹(如A
)。相反,该库仅包含在顶级文件夹中:
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework/_CodeSignature
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework/_CodeSignature/CodeResources
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework/JavaNativeFoundation
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework/Resources
/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/JavaNativeFoundation.framework/Resources/Info.plist
试图运行我得到的程序
[java] AquaNativeSupport: Unable to load library libvaqua.dylib: /private/var/folders/tg/06858t0j3w10js_5hb3k5frw0000gn/T/libvaqua4883847212092667097.dylib: dlopen(/private/var/folders/tg/06858t0j3w10js_5hb3k5frw0000gn/T/libvaqua4883847212092667097.dylib, 0x0001): Library not loaded: @rpath/JavaNativeFoundation.framework/Versions/A/JavaNativeFoundation
[java] Referenced from: /private/var/folders/tg/06858t0j3w10js_5hb3k5frw0000gn/T/libvaqua4883847212092667097.dylib
[java] Reason: tried: '/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/server/./JavaNativeFoundation.framework/Versions/A/JavaNativeFoundation' (no such file),
'/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/lib/server/../JavaNativeFoundation.framework/Versions/A/JavaNativeFoundation' (no such file),
'/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/bin/./JavaNativeFoundation.framework/Versions/A/JavaNativeFoundation' (no such file),
'/Library/Java/JavaVirtualMachines/zulu-16.jdk/Contents/Home/bin/../lib/JavaNativeFoundation.framework/Versions/A/Java
看起来输出不完整,但无论如何:您可以看到 java 正在尝试从框架的Versions/A/
子文件夹加载框架,该子文件夹在任何地方都不存在。
如果我创建那个子文件夹并创建一个指向其中现有二进制文件的软链接JavaNativeFoundation
,那么应用程序就可以很好地加载 JNI 代码。
鉴于这种情况,我有两个问题:
- 为什么 Azul/zulu 和 Liberica 中的框架都缺少版本结构?
- 有没有办法通过以不同的方式加载框架来解决这个问题?一些“dontusemajorversion”标志?
谢谢您的帮助。
解决方案
推荐阅读
- php - Laravel 5.8:beberlei/assert/lib/Assert/functions.php 返回类型产生错误
- swift - 如何将方法标记为“必需”
- python - 在 Pandas Dataframe 中为特定列查找其他值之间的值
- batch-file - 如何将多个变量从 VBS 传递到批处理脚本?
- sql - 将非格式化 CSV 导入 Postgres 数据库
- mysql - 调用 MySQL JSON 函数,传入表示数字属性的路径
- c# - 等待/异步仍然令人困惑
- c# - ASP.NET Core Web API & Entity Framework Core;为什么我会收到此错误?
- django - Django:检查用户是否喜欢模板中的帖子和相应的评论
- android - 在 FloatingActionButton 中使用 Material design 图标库