2

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によると、権限と関係があるのではないかと思います。

編集:次の2つのライブラリしか見つかりませんでした。

/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あり、オプションは何ですか?

4

1 に答える 1

3

まず、ライブラリ 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*

アップデート:

cabal標準的な推奨事項は、コマンドを直接使用するのではなく、Linuxディストリビューションのパッケージマネージャーを常に使用してインストールすることです。必要なパッケージがまだディストリビューションで利用できない場合は、リクエストしてください。すべての依存関係が整理されているため、このアプローチが最も安全です。欠点は、通常、最新のリリースを入手できないことです。yesodUbuntuにパッケージがあることがわかりました。yesod-bin が含まれているかどうかはわかりませんが (yesod については詳しくありません)、含まれている場合は、それが最も安全な方法です。欠点は、cabal ライブラリを一掃し、最初からやり直す必要があることです (haskell-platform を再インストールしてから、yesod をインストールします)。

あなたが進んでいると思われる別のオプションは、パッケージマネージャーを使用して haskell-platform をインストールすることですが、その後、cabalコマンドを使用して haskell-y のものをインストールします。cabal を使用してインストールできないもの (たとえば、haskell 以外のもの) をインストールするには、引き続きパッケージ マネージャーを使用します。これを行うと、cabal をルートとして実行したり、cabal を使用して実行できることをパッケージ マネージャーに実行させたりしないことで、多くの cabal 地獄を回避できます。このアプローチの主な欠点は、発見したように、ライブラリの依存関係を自分で処理する必要があることです。この道を進みたい場合は、Ubuntu の開発/テスト ビルドに切り替えることで、必要なものをすべて手に入れることができるかもしれません。または、必要なライブラリの正しいバージョンを入手して手動でインストールする必要がある場合もあります。

于 2013-06-06T09:39:18.660 に答える