链接的 Cabal 沙盒 - 从 `cabal repl` 找不到共享库

7
我有两个正在开发的软件包,AB。软件包B依赖于软件包AA在其自己的沙盒中开发,B也是类似情况:
A> cabal sandbox init
A> cabal install --enable-shared

B> cabal sandbox init
B> cabal sandbox add-source ../A/
B> cabal install

还要注意我的~/.cabal/config中有shared: True

一切看起来都很好,它们都可以成功安装。然而,在处理B时,如果我输入cabal repl,cabal-install会告诉我无法加载libAsomething.so/.dll文件。这里出了什么问题?

以下是精确的错误信息:

...
Loading package mtl-0.0.1 ... linking ... done.
Loading package A-0.0.0 ... <command line>: can't load .so/.DLL for: /home/athan/dev/A/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.3/A-0.0.0/libHSA-0.0.0-ghc7.8.3.so (/home/athan/dev/foo/B/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.3/A-0.0.0/libHSA-0.0.0-ghc7.8.3.so: undefined symbol: AsomethingCrazyInAmodule_closure)

编辑:

我正在使用 GHC 7.8.3 和 cabal-install 1.20.0.3。


"share: True" 应该做什么? - mb14
@mb14 https://dev59.com/BmrWa4cB1Zd3GeqP-Fto - Athan Clark
1
你确定 --enable-shared 会设置 shared 吗?也许是这样,但你提到的链接并没有关于在 ~/.cabal/config 中设置 shared 的内容。无论如何,--enable-share 并不会在 cabal sandbox 之间共享库,而是使用共享库和静态库,这是完全不同的。 - mb14
你不需要为了将 A 加入到 B 的沙盒中而创建一个 A 的沙盒。 - tibbe
1个回答

2

你是否只使用一个沙盒?

(unpack A into src/A)
(unpack B into src/B)
cd src/B
cabal sandbox init
cabal add-source ../src/A
cabal install                -- builds both A and B

现在只有一个沙盒(位于src/B目录下)。


1
add-source 不共享沙盒。 cabal sandbox init --sandbox ../src/A 则会共享。 - mb14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接