簡體   English   中英

Cabal在需要分析庫時未安裝依賴項?

[英]Cabal not installing dependencies when needing profiling libraries?

我想用概要分析來編譯程序,所以我運行:

$ 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文件中為library-profiling: True 從那時起,所有新安裝都會自動啟用分析。

不幸的是,這仍然意味着我必須手動重新安裝已安裝的舊軟件包。 盡管經過一段時間的手動操作, 現在我重新安裝了大多數軟件包,並啟用了性能分析...

從湯姆·洛赫斯特(Tom Lokhorst)的評論中:

我確實希望有人能帶來更好的答案,而這又不需要我下次手動重新安裝完整的Haskell平台。

對於未來的訪客:

安裝所有已安裝庫的概要分析版本的任務已變得不那么繁瑣了, cabal (cabal-install)現在可以在.cabal目錄(在Linux上為$HOME/.cabalworld文件中跟蹤使用它安裝的內容。 $HOME/.cabal ,在Windows上類似於C:\\Users\\%YOU%\\AppData\\Roaming\\cabal\\ ,在OSX上)。

因此,在config文件(在同一目錄中)中啟用了性能分析並清除了GHC的軟件包數據庫后(您可以找到每個ghc-pkg list nonexisting的全局和用戶db的位置;使用以下命令從全局數據庫中刪除cabal安裝的軟件包) ghc-pkg unregister packagename如果有的話),重命名或刪除整個用戶數據庫-這是必要的,因為world文件僅跟蹤顯式安裝的程序包,而不跟蹤其依賴項),安裝具有概要分析支持的所有程序均應按以下方式進行:

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

首先使用--dry-run以在實際重新安裝任何組件之前檢查問題。 如果它將重新安裝諸如processdirectory類的啟動軟件包,則是一個不好的信號,如果您不知道如何處理它,請在#haskell IRC頻道,郵件列表之一或此處尋求指導。 如果由於某些相互兼容的軟件包的黑客攻擊導致新版本無法找到一致的安裝計划,通常可以通過編輯world文件並限制某些軟件包的允許版本來解決。

然后,如果您樂觀地認為不會出現嚴重問題,

$ cabal install --reinstall world

在GHC忙着編譯的時候喝一杯好茶。

Daniel Fischer的回答看起來不錯,但是由於某種原因,我的〜/ .cabal / world庫僅包含直接安裝的庫的條目,而不包含它們的依賴項。

相反,我使用以下命令轉儲了所有已安裝庫的列表

$ ghc-pkg list > list

這列出了在系統范圍內和本地安裝的庫。 因此,我編輯了list文件以刪除第一部分(包含系統范圍內安裝的庫),僅將/home/<user>/.ghc/...之后的行保留/home/<user>/.ghc/... 最后我跑了

$ cabal install --reinstall $(cat list) 

這對我有用。 您可能應該--dry-run 然后去煮一壺茶。 或烤蛋糕。

對於2016年或以后的訪客:只需安裝ghc-prof

Debian Linux系統:

sudo apt-get install ghc-prof

Arch Linux系統:

sudo pacman -S ghc-prof

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM