如何解决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_PATH
和java.system.path
明确指向libzstd dylib。
我已经在原始C代码中插入了打印语句,并重新编译了libhadoopzstd.dylib
,以弄清楚dlopen
在搜索dylib
文件的路径。奇怪的是, LD_LIBRARY_PATH
,DYLD_FALLBACK_LIBRARY_PATH
和JAVA_LIBRARY_PATH
在null
中都显示为libhadoopzstd.dylib
。
由于唯一的区别是Java版本,所以我认为Java 11在路径上做了一些不同,而Java 8没有。有谁知道这是真的吗?
此外,有人知道从JVM中运行时dlopen
会搜索哪些路径吗?以及如何确认这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。