2014-11-09 2 views
1

Я использую Ubuntu 14.10 с GHC 7.6.3 и заговорщиками, установленных с помощью пакета установщика Ubuntu, и пытаюсь использовать структуру Heap данных, которые я наивно установленный с помощью:Кабалы: восстановить пакет, чтобы использовать новые библиотеки

cabal install heap 

Как только я начал импортировать библиотеку в мой код, я получил следующее сообщение об ошибке, связывающих:

... 
Loading package primitive-0.5.0.1 ... linking ... done. 
... 
Loading package heap-1.0.0 ... linking ... done. 
... 
Loading package primitive-0.5.2.1 ... linking ... done 
... 

GHCi runtime linker: fatal error: I found a duplicate definition for symbol 
    hsprimitive_memset_Word32 
whilst processing object file 
    /home/simon/.cabal/lib/primitive-0.5.2.1/ghc-7.6.3/HSprimitive-0.5.2.1.o 
This could be caused by: 
    * Loading two different object files which export the same symbol 
    * Specifying the same object file twice on the GHCi command line 
    * An incorrect `package.conf' entry, causing some object to be 
    loaded twice. 
GHCi cannot safely continue in this situation. Exiting now. Sorry. 

This answer умозрительно объясняет, что делать, но инструкции не являются достаточно специфичными для меня, чтобы следовать.

Как получить кучу, чтобы использовать примитив-0.5.2.1 (я предполагаю, что эта легко используемая библиотека является той, что устарела), или я должен делать что-то совершенно другое?

+0

Я предполагаю, что вы не используют 'cabal' для создания вашего кода. Использование 'cabal' и возможности его песочницы - лучший способ избежать этой проблемы. – ErikR

+0

Я просто набрал 'cabal install heap' и попал в эту ошибку. –

ответ

0

Одним из решений может быть специально установить более раннюю версию heap:

cabal install heap-0.6.0 

Вы, возможно, придется первой незарегистрированный кучи-1.0.0.

Другой вариант - сдуть каталог ~/.ghc. Разумеется, вам придется переустанавливать пакеты кэбалов.

Я думаю, что лучший вариант - начать использовать песочницу для ваших проектов.

Редактировать: heap-1.0.0 содержит тесты QuickCheck и, таким образом, включает в себя все зависимости QuickCheck. Чтобы установить эту версию без QuickCheck, попробуйте следующее:

  1. В новом каталоге, запустите cabal get heap-1.0.0
  2. cd heap-1.0.0
  3. Редактировать heap.cabal и удалить Build-Depends: линию
  4. Run cabal install
+0

Theres также параметр 'nix', если вы действительно этого хотите (менеджер пакетов). Я не использую его сам, но я слышал гораздо лучшие вещи по сравнению с песочницами. – alternative

+0

ОК, 'ghc-pkg unregister heap' и использование 0.6, похоже, работает, но я понятия не имею, почему более старый код использует новую библиотеку. Есть ли простой способ использования 1.0.0? –

+0

добавлена ​​информация о том, как установить версию 1.0.0 – ErikR