Подтвердить что ты не робот

Вызов Haskell из Java, динамическая ошибка привязки Перемещение

У меня возникли проблемы с компиляцией автономной библиотеки для использования Java (с С++ inbetween). В Haskell есть программа, экспортирующая одну функцию, которая обрабатывает некоторый текст и возвращает его. Программе в Haskell нужны некоторые внешние данные (двоичный файл). Я собираю его с помощью файла-вставки пакета. Когда я начал компиляцию с помощью:

$ 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

Может кто-нибудь объяснить это мне и дать несколько советов о том, как его решить?

4b9b3361

Ответ 1

Просто догадайтесь, но, возможно, вам нужна другая версия HSrts-ghc-7.6.3, так как это "нестандартная" сборка.