OSX UnsatisfiedLinkErrors запускает JNI-библиотеку в OSX catalina 10.15.x - PullRequest
0 голосов
/ 30 января 2020

После обновления до OSX Catalina у меня возникали проблемы с UnsatisfiedLinkErrors при попытке запустить библиотеку в JNI-формате под java с несколькими ссылками на собственные библиотеки, которые успешно работали в более ранних версиях 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

Принимая во внимание, что если компакт-диск в / path / to / solclientj и выполнить командную строку оттуда, он работает успешно. Любые подсказки относительно того, почему он находит библиотеки в текущем каталоге, но, очевидно, не, когда они находятся на DYLD_LIBRARY_PATH? Поскольку он, похоже, находит файл libsolclient_jni.dylib верхнего уровня через DYLD_LIBRARY_PATH, это только ссылка на libsolclient.so.1 из того же каталога, который не найден.

Спасибо за любую интересную информацию.

1 Ответ

1 голос
/ 31 января 2020

решено: это была защита целостности системы OSX (SIP). Это привело к тому, что скрипты / субоболочки / подпроцессы потеряли все окружение вызывающего, таким образом уничтожив мой DYLD_LIBRARY_PATH.

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

...