gpt4 book ai didi

java - 从Java调用Haskell,动态链接错误重定位

转载 作者:IT老高 更新时间:2023-10-28 20:48:10 31 4
gpt4 key购买 nike

我在编译供 Java 使用的独立库时遇到了麻烦(中间有 C++)。Haskell 中有一个程序导出一个处理一些文本并返回它的函数。Haskell 中的程序需要一些外部数据(二进制文件)。我在 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

谁能给我解释一下并给出一些解决方法?

最佳答案

只是一个猜测,但也许您需要不同版本的 HSrts-ghc-7.6.3,因为这是一个“非标准”构建。

关于java - 从Java调用Haskell,动态链接错误重定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800358/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com