usa studio sirve que para cuando java haskell dynamic dynamic-linking

studio - @override java



Llamar a Haskell desde Java, error de enlace dinámico Reubicación (1)

Tengo problemas con la compilación de una biblioteca independiente para uso de Java (con C ++ en medio). Hay un programa en Haskell que exporta una función que procesa un texto y lo devuelve. El programa en Haskell necesita algunos datos externos (archivo binario). Estoy ''compilando'' con la ayuda del paquete file-embed . Cuando comencé la compilación con:

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

Lanza el error:

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.

Este es el lugar donde uso file-embed.

Así que probé el enfoque propuesto (compilando dos veces, cambiando sufijos):

$ 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

Y ahora recibo un error que no entiendo:

/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

¿Alguien me puede explicar y dar algunos consejos sobre cómo resolverlo?


Solo una conjetura, pero tal vez necesites una versión diferente de HSrts-ghc-7.6.3 ya que esta es una compilación "no estándar".