【问题标题】:Unable to install yesod-bin无法安装yesod-bin
【发布时间】:2013-06-06 20:53:03
【问题描述】:

我正在将我的 yesod 框架更新到最新的 yesod 1.2 版本。我已经安装了 yesod-platform (痛苦....不得不手动删除旧的依赖....cabal hell),现在我需要安装 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 上的最新版本,我有什么选择?

【问题讨论】:

    标签: linux haskell ghc yesod


    【解决方案1】:

    首先,我会检查您是否有库 libHStar、libHSoptparse-applicative、libHSghc-paths、libHSfsnotify 和 libHShinotify。如果您使用发行版的包管理器安装了 haskell 平台,我怀疑您会在 /usr/local/lib/ghc-*.*.*/ 中找到这些库。例如,您可以使用以下命令搜索第一个库:

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

    如果您没有这些库,那么我认为您可以通过使用发行版的包管理器安装以下内容来获取它们:

    • libghc-tar-dev
    • libghc-optparse-applicative-dev
    • libghc-ghc-paths-dev
    • libghc-fsnotify-dev
    • libghc-hinotify-dev

    如果您已经拥有这些库,那么您可以调整链接中建议的修复:

    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 的东西)。如果你这样做,你可以避免很多 cabal 地狱,永远不要以 root 身份运行 cabal,并且永远不要让你的包管理器做任何可以使用 cabal 完成的事情。正如您所发现的,这种方法的主要缺点是您必须自己处理库依赖项。如果你想继续这条路,你可以通过切换到 Ubuntu 的一些开发/测试版本来获得你需要的一切。或者您可能需要获取所需库的正确版本并手动安装它们。

    【讨论】:

    • 感谢您的回复库不在该文件夹中,我尝试使用apt-get 安装库。但是,我只能安装libghc-tar-devlibghc-hinotify-dev,当我重新安装yesod-bin 时,错误仍然没有改变。也许它在不同的文件夹中?有关如何搜索它的任何建议?
    • 您可以使用例如sudo find /usr/local/lib -name 'libHStar*' 来确定系统上是否存在文件。
    • 所以我需要的五个库中只有两个,而且这两个不是正确的版本,我发现很难获得这些库,因为它们不在 apt-get 上ubuntu 12.04
    • 我已成功安装libghc-tar-dev-0.4.0.1,并将HStar-0.4.0.1.olibHStar-0.4.0.1.a 更改为chmod 777。但是安装的时候还是找不到-lHStar。我在想也许系统不知道要在哪个目录中查找库?
    • 在一天结束的时候,我清除了 ~/.ghc 重新安装了所有东西,它成功了!非常感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多