2014-05-22 26 views
21

Java tarafından kullanım için bağımsız bir kütüphane derlemede sıkıntı yaşıyorum (C++ inbetween ile). Haskell'de bir program işleyen ve bazı metinleri işleyen ve döndüren bir program var. Haskell'deki programın bazı harici verilere ihtiyacı var (ikili dosya). file-embed package'un yardımıyla derledim.Java'dan Haskell'i çağırmak, dinamik bağlantı hatası Relocation

$ ghc -fPIC -dynamic -c -O --make MyModule.hs 

O atar hata:

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. 

Bu benim dosya embed kullanmak yerdir ben derleme başladı .

yüzden önerilen yaklaşım (iki kez değişen ekleri derleme) çalıştı:

$ 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 

Ve şimdi ben anlamıyorum bir hata alıyorum:

/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 

kimse açıklayabilir bana ve nasıl çözüleceğine dair bazı ipuçları vermek?

cevap

1

Sadece bir tahmin, ancak HSrts-ghc-7.6.3'ün farklı bir sürümüne ihtiyacınız var çünkü bu bir "standart olmayan" yapıdır.