OSX UnsatisfiedLinkErrors 运行 OSX catalina 10 上的 JNI 包装库。15.x

OSX UnsatisfiedLinkErrors run JNI-wrapped library on OSX catalina 10.15.x

自从升级到 OSX Catalina 以来,我一直遇到 UnsatisfiedLinkErrors 问题,试图 运行 java 下的 JNI 包装库,其中包含多个本机库引用,成功 运行 在早期 OSX 版本下:

export DYLD_LIBRARY_PATH=/path/to/solclientj/lib:$DYLD_LIBRARY_PATH
java -cp /path/to/target/classes:<snip classpath> -Djava.library.path=/path/to/solclientj/lib com.example.demo.MockMatchingEngine <arguments...>

Jan 30, 2020 12:53:56 PM com.solacesystems.solclientj.core.impl.util.SolLogger critical
SEVERE: solclient_jni failed to load : /path/to/solclientj/lib/libsolclient_jni.dylib: dlopen(/path/to/solclientj/lib/libsolclient_jni.dylib, 1): Library not loaded: libsolclient.so.1
  Referenced from: /path/to/solclientj/lib/libsolclient_jni.dylib
  Reason: image not found
java.lang.UnsatisfiedLinkError: /path/to/solclientj/lib/libsolclient_jni.dylib: dlopen(/path/to/solclientj/lib/libsolclient_jni.dylib, 1): Library not loaded: libsolclient.so.1
  Referenced from: /path/to/solclientj/lib/libsolclient_jni.dylib
  Reason: image not found

然而,如果 cd 进入 /path/to/solclientj 并从那里执行命令行,它会 运行 成功。关于为什么它在当前目录中找到库但显然不是在 DYLD_LIBRARY_PATH 上时找到库的任何线索?因为它似乎确实是通过 DYLD_LIBRARY_PATH 找到顶级 libsolclient_jni.dylib,所以它只是未找到同一目录中引用的 libsolclient.so.1。

感谢您提供任何有趣的信息。

已解决:OSX 系统完整性保护 (SIP)。这导致 scripts/subshells/subprocesses 失去了调用者的所有环境,从而破坏了我的 DYLD_LIBRARY_PATH.

https://www.macworld.com/article/2986118/how-to-modify-system-integrity-protection-in-el-capitan.html