我正在将我的yesod框架更新为最新的yesod 1.2版本。我已经安装了yesod-platform(痛苦地......必须手动删除旧的依赖.... cabal地狱),现在我需要安装yesod-bin并且它应该完成。但是,在sudo cabal install 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
上的最新版本我有哪些选择?
答案 0 :(得分:3)
首先,我要检查你是否有libHStar库,libHSoptparse-applicative,libHSghc-paths,libHSfsnotify和libHShinotify。如果您使用发行版的软件包管理器安装了haskell平台,我怀疑您会在/usr/local/lib/ghc-*.*.*/
中找到这些库。例如,您可以使用以下命令搜索第一个库:
sudo find /usr/local/lib -name 'libHStar*'
如果您没有这些库,那么我认为您可以使用发行版的软件包管理器来安装以下软件:
如果您已经拥有这些库,那么您可以调整链接中建议的修复程序:
sudo chmod a+r /usr/local/lib/ghc-*/libHS*
更新:
标准建议似乎是你应该总是使用linux发行版的软件包管理器来安装东西,而不是直接使用cabal
命令。如果您想要的软件包尚未在发行版中提供,请提供。这种方法是最安全的,因为所有的依赖关系都已经为您解决了。缺点是您通常不会拥有最新版本。我看到Ubuntu上有一个yesod
包。我不知道它是否包含yesod-bin(我不熟悉yesod),但如果确实如此,那是最安全的方法。缺点是你可能不得不消灭你的cabal库并从头开始(重新安装haskell-platform,然后是yesod)。
另一个选择,似乎是你所使用的道路,是使用你的包管理器来安装haskell-platform,但之后使用cabal
命令安装任何haskell-y的东西。您仍然会使用您的软件包管理器来安装无法使用cabal安装的东西(例如,非haskell东西)。如果你这样做,你可以通过从不以root身份运行cabal来避免很多阴谋,并且永远不要让你的包管理器做任何可以使用cabal完成的事情。这种方法的主要缺点是你必须自己处理库依赖,正如你所发现的那样。如果你想继续沿着这条路走下去,你可以通过切换到Ubuntu的一些开发/测试版本来获得你需要的一切。或者您可能必须获得所需库的正确版本并手动安装它们。