프로파일링 라이브러리가 필요할 때 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 파일.그때부터 새로 설치하면 프로파일링이 자동으로 활성화됩니다.

불행하게도 이는 이미 설치된 이전 패키지를 수동으로 다시 설치해야 함을 의미합니다.하지만 이 작업을 수동으로 수행한 후에는 지금 프로파일링이 활성화된 상태에서 대부분의 패키지를 다시 설치하십시오...

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top