में एक गतिशील लाइब्रेरी (libjvm.dylib) को जोड़ना मेरे पास एक ऐसा एप्लिकेशन है जिसके लिए libjvm
(जेडीआई बाइंडिंग करने के लिए आवश्यक जेडीके से लाइब्रेरी) की आवश्यकता है। जब मैं 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
लेकिन निश्चित रूप से मुझे लगता है कि नहीं करना चाहती। मुझे हर बार सही स्थान निर्दिष्ट क्यों करना चाहिए यदि मुझे आवेदन शुरू करने पर हर बार इसे बार-बार देना है ?!
मैंने यह भी सीखा कि मैक ओएस एक्स पर गतिशील पुस्तकालयों को एक प्रकार का टिकट मिलता है जो वहां स्थान बताता है। हालांकि मुझे नहीं पता कि rpath
क्या है (मेरे लिए एक चर जैसा लगता है, लेकिन मैं इसे जोड़ने के दौरान कैसे सेट कर सकता हूं?)।
एप्लिकेशन हैकेल का उपयोग करके बनाया गया है, लेकिन मैं ld
का उपयोग कर ऑब्जेक्ट फ़ाइलों को मैन्युअल रूप से अच्छी तरह से लिंक कर सकता हूं। हालांकि, मैं उस आरपीएथ चीज पर फंस गया हूं - क्या यह शायद जेडीके पुस्तकालयों के लिए विशेष है?
ghc --make Main.hs mycbinding.o -ljvm -L<javahome>/jre/lib/server -o mybinary