2013-06-06 30 views
1

我正在將我的yesod框架更新爲最新的yesod 1.2版本。我已經安裝了yesod平臺(痛苦....不得不手動刪除舊的依賴.... cabal地獄),現在我需要安裝yesod-bin,它應該完成。但是,在sudo cabal install yesod-bin之後,我收到以下錯誤消息。無法安裝yesod-bin

Building yesod-bin-1.2.0... 
Preprocessing executable 'yesod-ld-wrapper' for yesod-bin-1.2.0... 
[1 of 1] Compiling Main    (ghcwrapper.hs, dist/build/yesod-ld-wrapper/yesod-ld-wrapper-tmp/Main.o) 
Linking dist/build/yesod-ld-wrapper/yesod-ld-wrapper ... 
/usr/bin/ld: cannot find -lHStar-0.4.0.1 
/usr/bin/ld: cannot find -lHSoptparse-applicative-0.5.2.1 
/usr/bin/ld: cannot find -lHSghc-paths-0.1.0.9 
/usr/bin/ld: cannot find -lHSfsnotify-0.0.6 
/usr/bin/ld: cannot find -lHShinotify-0.3.5 
collect2: ld returned 1 exit status 
Failed to install yesod-bin-1.2.0 
cabal: Error: some packages failed to install: 
yesod-bin-1.2.0 failed during the building phase. The exception was: 
ExitFailure 1 

this,我覺得這可能是與特權我不知道。

編輯:所以我只找到以下兩個庫。

/usr/lib/haskell-packages/ghc/lib/tar-0.3.2.0/ghc-7.4.1/libHStar-0.3.2.0.a 
/usr/lib/haskell-packages/ghc/lib/ghc-paths-0.1.0.8/ghc-7.4.1/libHSghc-paths-0.1.0.8.a 

我在嘗試將libghc-tar-dev更新到最新版本0.4.0.1。但是,0.3.2.0是apt-get上的最新版本,我有什麼選擇?

回答

2

首先,我會檢查你是否有庫libHStar,libHSoptparse-applicative,libHSghc-paths,libHSfsnotify和libHShinotify。如果您使用發行版的軟件包管理器安裝了haskell平臺,我懷疑您會在/usr/local/lib/ghc-*.*.*/中找到這些庫。例如,您可以使用此命令搜索的第一個庫:

sudo find /usr/local/lib -name 'libHStar*' 

如果你沒有這些庫,那麼我認爲你可以使用你的發行版的軟件包管理器安裝以下讓他們:

  • libghc焦油-dev的
  • libghc-optparse-應用性-dev的
  • libghc-GHC路徑-dev的
  • libghc-fsnotify-dev的
  • libghc-hinotify-dev的

如果你已經有了這些庫,那麼你可以適應固定在你的鏈接提示:

sudo chmod a+r /usr/local/lib/ghc-*/libHS* 

UPDATE:

標準的建議,似乎因爲你應該總是使用你的linux發行版的包管理器來安裝東西,而不是直接使用cabal命令。如果您需要的軟件包在發行版中尚不可用,請求它。這種方法是最安全的,因爲所有的依賴關係都已經爲你解決了。缺點是你通常不會有最新版本。我發現Ubuntu上有一個yesod包。我不知道它是否包含yesod-bin(我不熟悉yesod),但如果它確實存在,那是最安全的方法。缺點是你可能不得不清除你的cabal庫並從頭開始(重新安裝haskell-platform,然後yesod)。

另一種選擇,似乎是你走的路,是使用你的軟件包管理器來安裝haskell平臺,但之後使用cabal命令來安裝任何haskell-y的東西。你仍然會使用你的軟件包管理器來安裝無法使用cabal安裝的東西(例如,非haskell的東西)。如果你這樣做,你可以避免大量的陰謀,因爲永遠不會以root身份運行cabal,也不會讓你的包管理器做任何可以使用cabal完成的事情。這種方法的主要缺點是你必須自己處理庫依賴關係,就像你發現的那樣。如果你想繼續這樣的道路,你可以通過切換到Ubuntu的開發/測試版本來獲得所需的一切。或者您可能需要獲取所需庫的正確版本並手動安裝它們。

+0

感謝回覆libs不在該文件夾中,我嘗試使用'apt-get'安裝庫。但是,我只能安裝'libghc -tar-dev'和'libghc-hinotify-dev',並且當我重新安裝'yesod-bin'時,錯誤保持不變。也許它在不同的文件夾中?有關如何搜索它的任何建議? – HHC

+0

您可以確定使用例如'sudo find/usr/local/lib -name'libHStar *''在系統中是否存在文件。 – mhwombat

+0

所以我只需要五個庫中的兩個,這兩個不是正確的版本,我發現很難獲得這些庫,因爲它們不在ubuntu的「apt-get」中12.04 – HHC