Кабал не устанавливает зависимости при необходимости профилирования библиотек?
Я хочу скомпилировать мою программу с профилированием, поэтому я запускаю:
$ 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
И затем повторите для моей следующей зависимости..
Есть ли лучший способ сделать это? i.e делают ли кабальную работу самостоятельно, как для обычных библиотек?
Ответы
Ответ 1
Я включил library-profiling: True
в мой ~/.cabal/config
файл. С тех пор любые новые установки будут автоматически включать профилирование.
К сожалению, это все равно означает, что мне пришлось вручную переустановить старые пакеты, которые уже установлены. Хотя через некоторое время это делается вручную, теперь у меня есть большинство пакетов, переустановленных с включенным профилированием...
Ответ 2
Из комментария Тома Локхорста:
Я надеюсь, что кто-то придет с лучшим ответом, который не потребует от меня переустановки полной платформы Haskell вручную в следующий раз.
Для будущих посетителей:
Задача по установке профилирующих версий всех установленных библиотек стала менее сложной, cabal (cabal-install)
теперь отслеживает, что было установлено с помощью этого в файле world
в каталоге .cabal
(на linux, который be $HOME/.cabal
, на Windows что-то вроде C:\Users\%YOU%\AppData\Roaming\cabal\
, на OSX??).
Итак, после включения профилирования в файле config
(в том же каталоге) и очистки базы данных пакетов GHC (вы можете найти местоположение глобального и пользовательского db для ghc-pkg list nonexisting
; удалить пакеты, установленные в каббале, из глобальную базу данных с ghc-pkg unregister packagename
, если у вас есть, переименовать или удалить весь пользовательский db - это необходимо, потому что файл world
отслеживает только явно установленные пакеты, а не их зависимости), установка всего с поддержкой профилирования должна работать следующим образом:/p >
$ cabal install --reinstall world --dry-run
Сначала запустите с --dry-run
, чтобы проверить проблемы, прежде чем переустанавливать что-либо. Если он переустановит загрузочные пакеты, такие как process
или directory
, это плохой знак, если вы не знаете, как с ним обращаться, спросите IRC-канал #haskell
, один из списков рассылки или здесь для руководства, Если он не может найти последовательный план установки из-за новых версий hackage некоторых пакетов, которые несовместимы друг с другом, которые обычно могут быть решены путем редактирования world
и ограничения допустимых версий некоторых пакетов.
Затем, если вы настроены оптимистично, что ничего плохого не сломается,
$ cabal install --reinstall world
и у вас есть хороший горшок с чаем, в то время как GHC занят компиляцией.
Ответ 3
Ответ Даниэля Фишера выглядит неплохо, но по какой-то причине моя библиотека ~/.cabal/world содержит только записи для непосредственно установленных библиотек, а не их зависимости.
Вместо этого я выкинул список всех установленных библиотек, используя
$ ghc-pkg list > list
Здесь перечислены библиотеки, установленные как в системе, так и локально. Поэтому я отредактировал файл list
для удаления первой части (содержащей библиотеки, установленные в системном масштабе), оставляя только строки после /home/<user>/.ghc/...
. Наконец, я побежал
$ cabal install --reinstall $(cat list)
Это сработало для меня. Вы должны сначала сделать --dry-run
. Затем сделайте чайник с чаем. Или испечь торт.
Ответ 4
похоже, что сейчас нет никакого способа: Ticket # 282 - профилирующие версии библиотек не управляются хорошо " Как обычно, проблема заключается в отсутствии времени разработчика для реализации всех этих
которые мы все хотим ".
Ответ 5
Для посетителей 2016+: просто установите ghc-prof
Debian Linux Systems:
sudo apt-get install ghc-prof
Arch Linux Systems:
sudo pacman -S ghc-prof