我確實有一個應用程序需要與libjvm
(需要執行JNI綁定的JDK庫)鏈接。當我使用-L
告訴libjvm.dylib
的位置時,它成功編譯和鏈接。然而,當我運行的二進制我得到:在Mac OS X(rpath問題)中鏈接動態庫(libjvm.dylib)
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
手動鏈接目標文件。然而,我被困在那個rpath的東西 - 這可能是特殊的JDK庫?
這是我爲了打造這樣做:
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary