gpt4 book ai didi

c++ - 使用 Shake 和 Stack 构建链接到 Haskell 库的 C++ 项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:52 27 4
gpt4 key购买 nike

我正在尝试构建一个调用 Haskell 函数的简单 C++ 项目(可执行文件),使用 Shake 作为构建脚本并从脚本中调用 Stack 来构建 Haskell 库。

假设 Haskell 库名为 haskell-simple-lib

shake 脚本调用 stack install haskell-simple-lib 输出 .so 文件:libHShaskell-simple-lib-*version*-*unique标识符*.so

我的 Shake 规则取决于文件名,所以我不能使用上述名称,因为我事先不知道唯一标识符是什么。因此,Shake 脚本在文件上运行 cp_build/libHShaskell-simple-lib.so

C++ 可执行文件的链接选项有 -L_build-lhaskell-simple-lib

当我尝试运行可执行文件时,我收到一条错误消息:

error while loading shared libraries: libHShaskell-simple-lib-0.1.0.0-8DkaSm3F3d44RUd03fOuDx-ghc7.10.2.so: cannot open shared object file: No such file or directory

但是,如果我将复制到 _build 的文件重命名为 stack install 输出的原始名称(具有唯一标识符的那个),可执行文件将正确运行.

有人会认为我需要做的就是简单地将文件 cp_build 而无需从名称中删除唯一标识符,但是我需要知道名称.so 文件的 shake 脚本。

我不明白为什么在运行可执行文件时会搜索原始的 .so 文件名。链接标志没有提到 stack install 输出的 .so 的全名,只有 libHShaskell-simple-lib。难道是.so文件中嵌入了原来的名字?如果是这样,如何解决这个问题?

编辑:我知道这可以使用虚拟文件来解决,但我想知道是否有更好的方法来做到这一点。

最佳答案

原始标识符嵌入在.so中。我不记得所有的细节,但我知道我已经使用 rpath 解决了这些问题。在过去玩弄。

关于c++ - 使用 Shake 和 Stack 构建链接到 Haskell 库的 C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40960168/

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