我有一个libhadoopzstd.dylib,它是JNIHadoopzstd实现的一部分。 libhadoopzstd.dylib
包含对第二个dylib的dlopen调用- libzstd.1.dylib
-假设在本地可用。
在Java8上一切都正常(采用OpenJDK1.8.0.211)。使用java 11(OpenJDK 11.0.8)编译器和java 11运行时运行相同的代码会导致以下错误:
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
. 我也试图明确指出 LD_LIBRARY_PATH
以及 java.system.path
在运行java程序时,添加到libzstd dylib。
我在原来的c代码中插入了print语句,并重新编译了 libhadoopzstd.dylib
试着找出什么路 dlopen
正在搜索 dylib
中的文件。奇怪的是 LD_LIBRARY_PATH
, DYLD_FALLBACK_LIBRARY_PATH
以及 JAVA_LIBRARY_PATH
全部显示为 null
从内部 libhadoopzstd.dylib
.
由于唯一的区别是java版本,我认为Java11对Java8所没有的路径做了一些不同的事情。有人知道这是不是真的吗?
而且,有人知道什么路吗 dlopen
从jvm中运行时进行搜索?怎么能证实这一点呢?
暂无答案!
目前还没有任何答案,快来回答吧!