Mam aplikację, która wymaga powiązania z libjvm
(biblioteka z pakietu JDK potrzebna do tworzenia powiązań JNI). Kiedy mówię o lokalizacji libjvm.dylib
przy użyciu -L
, to z powodzeniem kompiluje i łączy. Jednakże gdy uruchomię binarny uzyskać:Łączenie biblioteki dynamicznej (libjvm.dylib) w systemie Mac OS X (wydanie rpath)
dyld: Library not loaded: @rpath/libjvm.dylib
Referenced from: <my home directory>/./mybinary
Reason: image not found
tej pory dowiedziałem się, że mogę uruchomić mój binarny Określanie LD_LIBRARY_PATH tak:
LD_LIBRARY_PATH=<path to libfolder installation> ./mybinary
Ale oczywiście nie chcę tego. Dlaczego powinienem podać dokładną lokalizację, czy muszę ją powtarzać za każdym razem, gdy uruchamiam aplikację ?!
Dowiedziałem się również, że biblioteki dynamiczne na Mac OS X otrzymują rodzaj znaczka, który określa lokalizację. Jednak nie wiem, co to jest rpath
(wydaje mi się, że to zmienna, ale jak mogę ją ustawić podczas łączenia?).
Aplikacja jest zbudowana przy użyciu haskell, ale równie dobrze mogę połączyć pliki obiektów ręcznie przy użyciu ld
. Jednak utknąłem na tym rpath rzecz - czy to może być specjalne do bibliotek JDK?
Oto co zrobić w celu zbudowania:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary