Решение ‘Я нашел дубликат для символа …’

#haskell #cabal #ghci

#хаскелл #заговор #ghci

Вопрос:

Я пытаюсь установить систему.Буфер обмена (http://hackage.haskell.org/package/Clipboard-2.3.2.0 ), который имеет зависимость от Win32 >= 2.2.0.0 amp;amp; <2.4. Я успешно установил его, но при попытке использовать библиотеку я столкнулся с сообщением об ошибке duplicate symbol.

Прочитав об этом, я узнал, что должна быть установлена только одна из библиотек; а именно, установлены Win32-2.3.1.1 и Win32-2.6.1.0. Если я удалю 2.6.1.0, это приведет к нарушению работы множества библиотек (ghci, cabal, практически всего), но если я удалю 2.3.1.1, я не смогу использовать библиотеку.

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

Мой вопрос в том, могу ли я каким-либо образом указать, что я хочу использовать библиотеку 2.3.1.1? Или что я могу сделать в этом случае?

Я в Windows

Комментарии:

1. Использование стека , вероятно, является хорошей идеей здесь. Это немного похоже на виртуальную среду, такую как Python, но на самом деле это делает больше, поскольку вы также указываете «план сборки» и т.д.

2. Если вы создаете с помощью cabal, вы можете указать версию пакета в файле .cabal, например. смотрите haskell.org/cabal/users-guide/developing-packages.html раздел 3.1.4

3. Рекомендуемые способы управления пакетами в настоящее время — либо через Stack (см. Комментарий @WillemVanOnsem выше), либо с помощью new-* cabal-install (в отличие от старых команд, подобных cabal build , которые, я полагаю, вы использовали до сих пор). Учитыв ая, что вы работаете в Windows, Stack может быть более простым вариантом для настройки.

4. Что касается вашей конкретной проблемы, поскольку Win32 является основной библиотекой GHC, ее нелегко заменить. В таком случае вы, вероятно, захотите начать использовать Stack (или, в качестве альтернативы, удалить версию 2.3.1.1 и начать использовать команды cabal-install new-* ) и указать, что вы хотите использовать 2.3.1.1 только в вашем конкретном проекте. Другая возможность заключается в том, что @ATayler ссылается на: в зависимости от вашей собственной версии Clipboard , которая принимает Win32-2.6 (для этого поддерживаются как Stack, так и последние версии cabal-install).

5. Я не воспроизвел вашу ошибку, но недавно я установил Clipboard-2.3.2.0 с использованием stack lts-12.14 , и он отлично работал. Напомним, что это lts работает с ghc-8.4.3 . возможно, вы используете другую версию ghc

Ответ №1:

Лучший подход — самостоятельно обновить библиотеку для работы с более новой версией Win32 или попросить автора сделать это за вас.