Frage

Nicht eine Programmierung Frage, aber das erste Mal, dass ich so etwas wie dies zu sehen.
UNR 1.6 (basierend auf Ubuntu 10.04) installiert die 6.12.1 Version von GHC.
Also, um zu bauen Cabal-install-0.8.2, muss ich installieren
die libghc6- Pakete von Parsec, mtl, Netzwerk und zlib.
Dann nach dem Start 'sh ./bootstrap.sh', erhalte ich:

Überprüfen installierten Pakete für GHC-6.12.1 ...
Parsec ist bereits installiert und die Version ist ok.
Netzwerk bereits installiert ist und die Version ist in Ordnung.
Cabal ist bereits installiert und die Version ist ok.
mtl ist bereits installiert und die Version ist ok.
HTTP ist bereits installiert und die Version ist ok.
zlib ist bereits installiert und die Version ist ok.
[1 von 1] compilieren Main (Setup.hs, Setup.o)
Linking-Setup ...
Konfigurieren von Kabalen-install-0.8.2 ...
Vorbearbeitung Executables für Kabale-install-0.8.2 ...
Der Aufbau Kabalen-install-0.8.2 ...
[1 von 40] compilieren Distribution.Client.BuildReports.Types (Distribution / Client / BuildReports / Types.hs, dist / build / kabale / kabale-tmp / Distribution / Client / BuildReports / Types.o)
[2 von 40] compilieren Distribution.Client.Utils (Vertrieb / Client / Utils.hs, dist / build / Kabale / Kabale-tmp / Vertrieb / Client / Utils.o)

... zwei Warnungen über nicht addPackageExcludeConstraint und Antwort ...

verwendet

[39 von 40] compilieren Distribution.Client.Install (Vertrieb / Client / Install.hs, dist / build / Kabale / Kabale-tmp / Vertrieb / Client / Install.o)
[40 von 40] compilieren Main (Main.hs, dist / build / Kabale / Kabale-tmp / main.o)
Linking dist / build / Kabale / Kabale ...
collect2: ld beendet mit dem Signal 9 [Processus arrêté]

Fehler bei der Kabale installierende Bootstrap:
Den Bau der Kabalen-Installationspaket fehlgeschlagen

Zwischen Verknüpfung und collect2 (eine Minute oder so), die LED von meiner Festplatte twinkles
als ob viele Dateien geschrieben oder gelesen werden.

Ich weiß nicht, ob es relevant ist, aber hier sind die Versionen der Abhängigkeiten
Cabal-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
Netzwerk-2.2.1.7
Parsec-2.1.0.1
zlib-0.5.2.0

War es hilfreich?

Lösung

Ich habe das gleiche Problem. Ich füge splitobjs = NO jederzeit in ghc- . .ebuild. Ich habe dann wieder aufbauen ghc, aber Kabale installieren noch nicht ld passieren kann. weil meine gentoo Box hat keine Swap-Partition. Also ich meine usb-Scheibe 2G verwenden Sie eine temporäre Swap-Partition zu erstellen. dann kann ich Kabale installierende Erfolg aufbauen. Ich fand es wird zusätzliche 100M Swap-Speicher verwenden und meine eeepc hat 512M Speicher. Also ich denke, Sie eine USB-Festplatte verwenden können, die mehr als 100 Millionen Speicherplatz verfügt. gerade: mkswap / dev / sd * swapon / dev / sd *

Andere Tipps

Was passiert ist, dass der Kernel den ld Linker Prozess tötet, weil es zu viel Speicher verwendet wird.

Der Grund ld ist so viel Speicher verwendet, ist wegen eines Merkmals „split objs“ genannt, was zur Folge hat, dass Standardbibliotheken wie libHSbase.a 10s von Tausenden von winzigen .o Dateien enthalten. Der Linker ist für diesen Anwendungsfall optimiert und endet viel Speicher verwendet wird.

Das „split objs“ Funktion sollte durch die Verknüpfung in kompilierten Programme viel kleiner machen nur die Bits der Standardbibliotheken, die tatsächlich verwendet werden. Es funktioniert durch die Spaltung jedes kompilierte Haskell-Modul in eine separate Datei .o für jede Funktion.

Das ist also offensichtlich ein Problem für Systeme mit weniger Speicher, wie Ihr Netbook. Es ist wahrscheinlich, mit etwas passieren Sie verknüpfen, nicht nur cabal. Es ist möglich, ghc von der Quelle zu bauen mit den splitobjs off-Funktion eingeschaltet. Zum Beispiel hat Gentoo dies automatisch für Maschinen mit 512 MB RAM oder weniger. Also, wenn Sie zuverlässig auf Ihrem Netbook verwenden ghc wollen müssen Sie wahrscheinlich an bauen von der Quelle ohne splitobjs . Sie können auf eine etwas leistungsfähigere Maschine bauen ghc und es dann zu Ihrem Netbook übertragen werden.

In Zukunft wird dieses Problem weg, wenn wir mit gemeinsam genutzten Bibliotheken standardmäßig auf Linux wechseln.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top