2014-12-11 2 views
7

У меня есть два пакета, которые я разрабатываю, A и B. Упаковка B зависит от A.Связанные песочницы Cabal - общие библиотеки не найдены из `cabal repl`

A был разработан в своей собственной песочнице, и подобная история идет на B:

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

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

также отметить, что shared: True в моем ~/.cabal/config.

Все выглядит хорошо здесь, они оба устанавливаются просто отлично. Однако при работе с 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) 

Edit:

Я использую GHC 7.8.3 и междусобойчик установить 1.20.0.3.

+0

что такое «доля: правда»? – mb14

+0

@ mb14 http://stackoverflow.com/questions/13188387/what-does-shared-mean-in-cabal-config –

+1

Вы хотите, чтобы '--enable-shared' установил' shared'. Это может быть так, но ссылка, на которую вы ссылаетесь, ничего не говорит о 'shared' в' ~/.cabal/config'. В любом случае этот '--enable-share' не передает библиотеку между песочницей cabal, но использует разделяемую библиотеку vs static one, что совершенно другое. – mb14

ответ

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

Смежные вопросы