Ho problemi con la compilazione di una libreria autonoma per l'utilizzo da parte di Java (con C++ inbetween). Esiste un programma in Haskell che esporta una funzione che elabora del testo e lo restituisce. Il programma in Haskell necessita di alcuni dati esterni (file binario). Lo sto 'compilando' con l'aiuto di file-embed package. Quando ho iniziato la compilazione con:Chiamata di Haskell da Java, errore di collegamento dinamico Relocation
$ ghc -fPIC -dynamic -c -O --make MyModule.hs
Esso genera l'errore:
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.
Questo è il luogo in cui io uso di file-embed.
così ho provato l'approccio proposto (compilazione due volte, suffissi che cambiano):
$ 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
e ora sto ottenendo un errore che non capisco:
/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
Qualcuno può spiegare a me e dare alcuni suggerimenti su come risolverlo?