5

プログラミングの質問ではありませんが、初めてこのようなものを見ました。
UNR 1.6(Ubuntu 10.04に基づく)は、6.12.1バージョンのGHCをインストールします。
したがって、cabal-install-0.8.2をビルドするには
、parsec、mtl、network、およびzlibのlibghc6-パッケージをインストールする必要があります。
次に、「sh ./bootstrap.sh」を起動した後、次のようになります。

インストールされているパッケージのghc-6.12.1を確認しています...
parsecはすでにインストールされており、バージョンは問題ありません。
ネットワークはすでにインストールされており、バージョンは問題ありません。
Cabalはすでにインストールされており、バージョンは問題ありません。
mtlはすでにインストールされており、バージョンは問題ありません。
HTTPはすでにインストールされており、バージョンは問題ありません。
zlibはすでにインストールされており、バージョンは問題ありません。
[1/1]メインのコンパイル(Setup.hs、Setup.o)
セットアップのリンク...
cabal-install-0.8.2の構成...cabal-install-0.8.2
の実行可能ファイルの前処理...
cabal-install-の構築0.8.2..。
[1/40] Distribution.Client.BuildReports.Typesのコンパイル(Distribution / Client / BuildReports / Types.hs、dist / build / cabal / cabal-tmp / Distribution / Client / BuildReports / Types.o)
[2/40]コンパイルDistribution.Client.Utils(Distribution / Client / Utils.hs、dist / build / cabal / cabal-tmp / Distribution / Client / Utils.o)

...未使用のaddPackageExcludeConstraintと応答に関する2つの警告..。

[39/40] Distribution.Client.Install(Distribution / Client / Install.hs、dist / build / cabal / cabal-tmp / Distribution / Client / Install.o)
のコンパイル[40/40] Main(Main.hs、 dist / build / cabal / cabal-tmp / Main.o)
dist / build / cabal /cabalをリンクしています...
collect2:ldはシグナル9で終了しました[Processusarrêté]

cabal-installブートストラップ中のエラー:
cabal-installパッケージのビルドに失敗しました

リンクとcollect2の間(1分程度)、ハードドライブのLEDは、
多くのファイルが書き込まれたり読み取られたりするようにきらめきます。

関連性があるかどうかはわかりませんが、依存関係のバージョンは次のとおりです。Cabal-
1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
network-2.2.1.7
parsec-2.1.0.1
zlib-0.5.2.0

4

3 に答える 3

7

何が起こっているのかというと、カーネルがldメモリを使いすぎているためにリンカープロセスを強制終了しているということです。

大量のメモリを使用する理由ldは、「split objs」と呼ばれる機能が原因で、のような標準ライブラリlibHSbase.aには数万の小さな小さな.oファイルが含まれているという結果になります。リンカはこのユースケース向けに最適化されておらず、多くのメモリを使用することになります。

「オブジェクトの分割」機能は、実際に使用される標準ライブラリのビットのみをリンクすることにより、コンパイルされたプログラムをはるかに小さくすることを目的としています。.oこれは、コンパイルされた各Haskellモジュールを関数ごとに個別のファイルに分割することで機能します。

したがって、これは明らかに、ネットブックのようにメモリが少ないシステムでは問題になります。だけでなく、リンクしたものすべてで発生する可能性がありますcabal。splitobjs機能をオフにして、ソースからghcをビルドすることができます。たとえば、Gentooは、512Mb以下のRAMを搭載したマシンに対してこれを自動的に実行します。したがって、ネットブックでghcを確実に使用したい場合は、splitobjsを使用せずにソースからビルドする必要があります。少し強力なマシンでghcを構築し、それをネットブックに転送できます。

将来、Linuxでデフォルトで共有ライブラリを使用するように切り替えると、この問題は解消されます。

于 2010-06-29T22:36:52.533 に答える
1

同じ問題があります。ghc-ではいつでもsplitobjs=NOを追加します.ebuild。次に、ghcを再構築しますが、cabal-installはまだldを渡すことができません。私のgentooボックスにはスワップパーティションがないからです。そこで、2GUSBディスクを使用して1つの一時スワップパーティションを作成します。その後、cabal-installの成功を構築できます。私はそれが余分な100Mのスワップスペースを使用することを発見しました、そして私のeeepcは512Mのメモリを持っています。したがって、1億を超える容量を持つ1つのUSBディスクを使用できると思います。ちょうど:mkswap / dev / sd * swapon / dev / sd *

于 2011-03-02T09:14:56.020 に答える
0

dd if = / dev / zero of = / swapfile bs = 1024 count = 2048k mkswap / swapfile swapon / swapfile

于 2013-10-30T15:37:00.657 に答える