2014-05-22 7 views
21

मुझे जावा द्वारा उपयोग के लिए एक स्टैंडअलोन लाइब्रेरी संकलित करने में समस्याएं आ रही हैं (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 

किसी को भी व्याख्या कर सकते हैं यह मेरे लिए है और इसे हल करने के बारे में कुछ सुझाव दें?

उत्तर

1

बस एक अनुमान है, लेकिन शायद आपको HSrts-ghc-7.6.3 के विभिन्न संस्करण की आवश्यकता है क्योंकि यह एक "गैर-मानक" निर्माण है।

संबंधित मुद्दे