У меня есть приложение, для которого требуется привязка к libjvm
(библиотека из JDK, необходимая для привязки JNI). Когда я укажу местоположение libjvm.dylib
с помощью -L
, он успешно компилирует и связывает. Однако, когда я запускаю двоичный код, я получаю:
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
До сих пор я узнал, что могу запустить свой двоичный файл, указав LD_LIBRARY_PATH следующим образом:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Но, конечно, я этого не хочу. Почему я должен указывать точное местоположение в любом случае, если я должен давать его снова и снова при каждом запуске приложения?!
Я также узнал, что динамические библиотеки на mac os x действительно получают вид штампа, который указывает там местоположение. Однако я не знаю, что rpath
(кажется мне переменной, но как я могу установить его во время компоновки?).
Приложение построено с использованием haskell, но я могу также хорошо связать объектные файлы вручную, используя ld
. Тем не менее, я застрял в этом вопросе - возможно, он особенный для библиотек JDK?
Вот что я делаю, чтобы построить:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary