Linked Cabal sandboxes - shared libraries not found from `cabal repl`
Asked Answered
E

1

7

I've got two packages that I'm developing, A and B. Package B depends on A.

A was developed in it's own sandbox, and a similar story goes for B:

A> cabal sandbox init
A> cabal install --enable-shared

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

also note that shared: True is in my ~/.cabal/config.

Everything looks good here, they both install just fine. However, while working on B, if I issue cabal repl, cabal-install tells me that it can't load the libAsomething.so/.dll file. What went wrong here?

Here is the exact error:

...
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)

Edit:

I'm using GHC 7.8.3 and cabal-install 1.20.0.3.

Erne answered 11/12, 2014 at 17:32 Comment(4)
what is 'share: True' supposed to do ?Thyself
@Thyself #13188887Erne
Are you that --enable-shared will set shared. It might be the case but the link you refer doesn't say anything about shared in ~/.cabal/config. Anyway this --enable-share doesn't share library between cabal sandbox but uses shared library vs static one, which is totally different.Thyself
You don't need to create a sandbox for A to be able to add it into a sandbox for B.Magnetometer
C
2

Does using just one sandbox work for you?

(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

Now there is only one sandbox (located in src/B).

Crimple answered 11/12, 2014 at 19:2 Comment(1)
add-source doesn't share the sandbox. cabal sandbox init --sandbox ../src/A does.Thyself

© 2022 - 2024 — McMap. All rights reserved.