프로파일링 라이브러리가 필요할 때 Cabal이 종속성을 설치하지 않습니까?
문제
프로파일링을 사용하여 프로그램을 컴파일하고 싶으므로 다음을 실행합니다.
$ 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
파일.그때부터 새로 설치하면 프로파일링이 자동으로 활성화됩니다.
불행하게도 이는 이미 설치된 이전 패키지를 수동으로 다시 설치해야 함을 의미합니다.하지만 이 작업을 수동으로 수행한 후에는 지금 프로파일링이 활성화된 상태에서 대부분의 패키지를 다시 설치하십시오...
다른 팁
Tom Lokhorst의 의견에서:
누군가가 더 나은 답변을 제공해주기를 바랍니다. 다음 번에 전체 Haskell 플랫폼을 수동으로 다시 설치할 필요가 없는 답변입니다.
미래의 방문객을 위해:
설치된 모든 라이브러리의 프로파일링 버전을 설치하는 작업이 덜 번거로워졌습니다. cabal (cabal-install)
이제 이를 사용하여 설치된 항목을 추적합니다. world
파일을 .cabal
디렉토리(리눅스에서는 $HOME/.cabal
, Windows에서는 다음과 같습니다. C:\Users\%YOU%\AppData\Roaming\cabal\
, OSX에서 ??).
따라서 프로파일링을 활성화한 후 config
파일(동일한 디렉토리에 있음), GHC의 패키지 데이터베이스 지우기(전역 및 사용자 DB의 위치를 찾을 수 있음) ghc-pkg list nonexisting
;다음을 사용하여 전역 데이터베이스에서 Cabal이 설치한 패키지를 제거합니다. ghc-pkg unregister packagename
있는 경우 전체 사용자 DB의 이름을 바꾸거나 삭제하십시오. world
파일은 종속성이 아닌 명시적으로 설치된 패키지만 추적합니다. 프로파일링 지원이 포함된 모든 항목을 설치하면 다음과 같이 작동합니다.
$ cabal install --reinstall world --dry-run
처음으로 실행 --dry-run
실제로 무엇이든 다시 설치하기 전에 문제를 확인합니다.다음과 같은 부팅 패키지를 다시 설치하는 경우 process
또는 directory
, 그건 나쁜 징조입니다. 어떻게 처리해야 할지 모르겠다면, 전화로 문의하세요. #haskell
메일링 리스트 중 하나인 IRC 채널 또는 지침을 보려면 여기를 클릭하세요.의 새 버전으로 인해 일관된 설치 계획을 찾지 못하는 경우 해킹 서로 호환되지 않는 일부 패키지는 일반적으로 다음을 편집하여 해결할 수 있습니다. world
파일을 삭제하고 일부 패키지의 허용 버전을 제한합니다.
그렇다면 심하게 깨지는 일은 없을 것이라고 낙관한다면,
$ cabal install --reinstall world
GHC가 바쁜 컴파일을 하는 동안 차 한잔의 여유를 가져보세요.
Daniel Fischer의 대답은 좋아 보이지만 어떤 이유로 든 내 ~/.cabal/World Library에는 의존성이 아닌 라이브러리에 직접 설치된 라이브러리 만 포함되어 있습니다.
대신, 나는
$ ghc-pkg list > list
여기에는 시스템 전체 및 로컬로 설치된 라이브러리가 나와 있습니다. 따라서 편집했습니다 list
첫 번째 부분을 제거하려는 파일 (시스템 전체에 설치된 라이브러리 포함). /home/<user>/.ghc/...
. 마침내, 나는 달렸다
$ cabal install --reinstall $(cat list)
이것은 나를 위해 효과가있었습니다. 당신은 아마해야 할 것입니다 --dry-run
첫 번째. 그런 다음 차 냄비를 만드십시오. 또는 케이크를 굽습니다.
방문자 2016+ : 설치 만하면됩니다 ghc-prof
데비안 리눅스 시스템 :
sudo apt-get install ghc-prof
아치 리눅스 시스템 :
sudo pacman -S ghc-prof