Cabal не устанавливает зависимости при необходимости библиотек профилирования?

StackOverflow https://stackoverflow.com/questions/1704421

  •  19-09-2019
  •  | 
  •  

Вопрос

Я хочу скомпилировать свою программу с профилированием, поэтому запускаю:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...

Итак, проблема в том, что в отличие от обычного приветственного поведения Cabal, Cabal не разрешает зависимости и не устанавливает их, когда требуются библиотеки профилирования.

Я могу обойти это, разрешив зависимости вручную (путем следующих ошибок, которые появляются через некоторое время компиляции):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p Tensor --reinstall
$ cabal install -p ObjectName --reinstall
$ cabal install -p GLURaw --reinstall
$ cabal install -p OpenGL --reinstall
$ cabal install -p GLUT --reinstall

А затем повторите для моей следующей зависимости..

Есть лучший способ сделать это?то есть заставить Cabal выполнять работу самостоятельно, как это делается для обычных библиотек?

Это было полезно?

Решение

я включил library-profiling: True в моем ~/.cabal/config файл.С этого момента любые новые установки будут автоматически включать профилирование.

К сожалению, это по-прежнему означает, что мне пришлось вручную переустанавливать уже установленные старые пакеты.Хотя, спустя некоторое время, делая это вручную, я сейчас большинство пакетов переустановлено с включенным профилированием...

Другие советы

Из комментария Тома Локхорста:

Я очень надеюсь, что кто-нибудь предложит лучший ответ, который не потребует от меня в следующий раз переустанавливать всю платформу Haskell вручную.

Для будущих посетителей:

Задача установки профилирующих версий всех установленных библиотек стала менее рутинной. cabal (cabal-install) теперь отслеживает, что было установлено с его помощью в world файл в .cabal каталог (в Linux это будет $HOME/.cabal, в Windows что-то вроде C:\Users\%YOU%\AppData\Roaming\cabal\, на OSX ??).

Итак, после включения профилирования в config файл (в том же каталоге) и очистку базы данных пакетов GHC (вы можете найти расположение глобальной и пользовательской базы данных для каждого файла). ghc-pkg list nonexisting;удалите пакеты, установленные Cabal, из глобальной базы данных с помощью ghc-pkg unregister packagename если они у вас есть, переименуйте или удалите всю пользовательскую базу данных — это необходимо, потому что world file отслеживает только явно установленные пакеты, а не их зависимости), установка всего с поддержкой профилирования должна работать следующим образом:

$ cabal install --reinstall world --dry-run

Первый запуск с --dry-run чтобы проверить наличие проблем, прежде чем что-либо переустанавливать.Если бы он переустановил загрузочные пакеты, такие как process или directory, это плохой знак, если не знаешь, как с этим справиться, спроси на #haskell Канал IRC, один из списков рассылки или здесь для получения инструкций.Если не удается найти согласованный план установки из-за появления новых версий на хакерство некоторых пакетов, несовместимых друг с другом, обычно это можно решить, отредактировав файл world file и ограничение допустимых версий некоторых пакетов.

Тогда, если вы оптимистичны и уверены, что ничего серьезно не сломается,

$ cabal install --reinstall world

и выпейте чашечку чая, пока GHC занят компиляцией.

Ответ Дэниела Фишера выглядит хорошо, но по какой-то причине моя библиотека ~/.cabal/world содержала только записи для непосредственно установленных библиотек, а не их зависимостей.

Вместо этого я выгрузил список всех установленных библиотек, используя

$ ghc-pkg list > list

Здесь перечислены библиотеки, установленные общесистемно и локально.Поэтому я отредактировал list файл, чтобы удалить первую часть (содержащую библиотеки, установленные для всей системы), оставив только строки после /home/<user>/.ghc/....Наконец я побежал

$ cabal install --reinstall $(cat list) 

Это сработало для меня.Возможно, тебе стоит сделать --dry-run первый.Тогда иди заваривай чай.Или испечь пирог.

Для посетителей 2016+:Просто установите ghc-prof

Системы Debian Linux:

sudo apt-get install ghc-prof

Архивные Linux-системы:

sudo pacman -S ghc-prof

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top