Mac Java 11 vs Java 8 dylib dlopen错误:无法加载libzstd.1.dylib

问题描述

我有一个libhadoopzstd.dylib,它是JNI Hadoop ZSTD实现的一部分。

libhadoopzstd.dylib包含对第二个dylib libzstd.1.dylib的dlopen调用-假定在本地可用。

在Java 8(AdoptOpenJdk 1.8.0.211)上一切正常。使用Java 11(AdoptOpenJdk 11.0.8)编译器和Java 11 Runtime运行相同的代码会导致以下错误:

Error loading zstandard native libraries: java.lang.InternalError: Cannot load libzstd.1.dylib (dlopen(libzstd.1.dylib,9): image not found)!

我已经确认libzstd.1.dylib中存在/usr/local/lib。我还尝试在运行Java程序时将LD_LIBRARY_PATHjava.system.path明确指向libzstd dylib。

我已经在原始C代码中插入了打印语句,并重新编译了libhadoopzstd.dylib,以弄清楚dlopen在搜索dylib文件的路径。奇怪的是, LD_LIBRARY_PATHDYLD_FALLBACK_LIBRARY_PATHJAVA_LIBRARY_PATHnull中都显示为libhadoopzstd.dylib

由于唯一的区别是Java版本,所以我认为Java 11在路径上做了一些不同,而Java 8没有。有谁知道这是真的吗?

此外,有人知道从JVM中运行时dlopen会搜索哪些路径吗?以及如何确认这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...