मुझे जावा द्वारा उपयोग के लिए एक स्टैंडअलोन लाइब्रेरी संकलित करने में समस्याएं आ रही हैं (C++ inbetween के साथ)। हास्केल में एक ऐसा फ़ंक्शन निर्यात करने वाला एक प्रोग्राम है जो कुछ पाठ को संसाधित करता है और इसे वापस करता है। हास्केल में प्रोग्राम को कुछ बाहरी डेटा (बाइनरी फ़ाइल) की आवश्यकता है। मैं file-embed package की सहायता से इसे 'संकलित कर रहा हूं'। जब मैं के साथ संकलन शुरू कर दिया:जावा से हास्केल को कॉल करना, गतिशील लिंकिंग त्रुटि रिलायंस
$ ghc -fPIC -dynamic -c -O --make MyModule.hs
यह फेंकता त्रुटि:
MyModule.hs:239:15:
Dynamic linking required, but this is a non-standard build (eg. prof).
You need to build the program twice: once the normal way, and then
in the desired way using -osuf to set the object file suffix.
यह जगह है जहाँ मैं फ़ाइल एम्बेड का उपयोग करें।
तो मैं प्रस्तावित दृष्टिकोण (दो बार संकलन, बदलते प्रत्यय) की कोशिश की:
$ ghc -fPIC -c -O --make MyModule.hs
$ ghc -osuf d.o -fPIC -dynamic -c -O --make MyModule.hs
$ javac -cp javacpp.jar MyModule.java
$java -jar javacpp.jar -Dcompiler.path=ghc -Dcompiler.output.prefix="-optc-O3 -Wall MyModule.d.o -dynamic -fPIC -shared -lstdc++ -lHSrts-ghc7.6.3 -o " -Dcompiler.linkpath.prefix2="-optl -Wl,-rpath," MyModule
और अब मैं एक त्रुटि है कि मुझे समझ नहीं आता हो रही है:
/usr/bin/ld: MyModule.d.o: relocation R_X86_64_PC32 against undefined symbol `{Directory_with_code}zi{Some_module}_{Some_module}_con_info' can not be used when making a shared object; recompile with -fPIC
किसी को भी व्याख्या कर सकते हैं यह मेरे लिए है और इसे हल करने के बारे में कुछ सुझाव दें?