我有两个正在开发的软件包,
A
和B
。软件包B
依赖于软件包A
。
A
在其自己的沙盒中开发,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。
--enable-shared
会设置shared
吗?也许是这样,但你提到的链接并没有关于在~/.cabal/config
中设置shared
的内容。无论如何,--enable-share
并不会在 cabal sandbox 之间共享库,而是使用共享库和静态库,这是完全不同的。 - mb14