2010-06-29 22 views
5

Pas une question de programmation, mais la première fois que je vois quelque chose comme ça.
UNR 1.6 (basé sur Ubuntu 10.04) installe la version 6.12.1 de GHC.
Donc, pour construire cabal-install-0.8.2, je dois installer
les paquets libghc6 de parsec, mtl, network et zlib.
Puis, après le lancement de 'sh ./bootstrap.sh', je reçois:comment puis-je construire cabal-installer sur eeePc 701/Ubuntu Netbook Remix 1.6 (Lucid)

Vérification des paquets installés pour GHC-6.12.1 ...
parsec est déjà installé et la version est ok.
réseau est déjà installé et la version est ok.
Cabal est déjà installé et la version est ok.
mtl est déjà installé et la version est correcte.
HTTP est déjà installé et la version est correcte. Zlib est déjà installé et la version est OK.
[1 1] Compiler principal (Setup.hs, Setup.o)
Configuration Liaison ...
Configuration cabale-install-0.8.2 ...
executables Prétraitement pour cabale-install-0.8.2 ...
Construction cabal-install-0.8.2 ...
[1 of 40] Compilation Distribution.Client.BuildReports.Types (Distribution/Client/BuildReports/Types.hs, dist/build/cabal/cabal- tmp/Distribution/Client/BuildReports/Types.o)
[2 sur 40] Compiler Distribution.Client.Utils (Distribution/Client/Utils.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Utils. o)

... deux avertissements sur non utilisés addPackageExcludeConstraint et la réponse ...

[39 40] Distribution.Client.Install Compiler (Distribution/Client/Install.hs, dist/build/cabale/cabale tmp/Distribution/Client/Install.o)
[40 sur 40] Compilation principale (Main.hs, dist/build/cabal/cabal-tmp/Main.o)
Liaison dist/build/cabale/cabal ...
collect2: ld terminé par le signal 9 [Processus arrêté]

erreur lors de l'installation d'amorçage cabale-:
construction du paquet cabal-install fai led

Entre la liaison et collect2 (une minute ou deux), la LED de mon disque dur scintille
comme si beaucoup de fichiers sont écrits ou lus.

Je ne sais pas si elle est pertinente, mais voici les versions des dépendances
Cabal-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
réseau 2.2.1.7
parsec-2.1.0.1
zlib-0.5.2.0

+0

9 est SIGKILL - combien de mémoire utilise ld quand il est tué? Peut-être s'agit-il d'une situation de MOO? –

+0

En effet, eeePc 701 a 512Mo Ram et mon swap est configuré pour 256Mo et tout est utilisé à 100% avant le crash. Mais pourquoi l'étape de liaison n'est-elle pas aussi intelligente que l'étape de compilation (25% Ram, 40% swap)? – sauf

+0

Il échoue également misérablement sur les OLO XO-1, en raison des 256 Mo de RAM. J'ai essayé tout ce que je pouvais imaginer pour installer cabal-install. – Dan

Répondre

1

J'ai le même problème. J'ajoute splitobjs = NO à tout moment dans ghc- . .ebuild. alors je reconstruis ghc, mais cabal-install ne peut toujours pas passer ld. parce que ma boîte de gentoo n'a pas de partition de swap. J'utilise donc mon disque usb 2G pour créer une partition de swap temporaire. alors je peux construire le succès de cabal-install. J'ai trouvé qu'il utiliserait un espace d'échange supplémentaire de 100M et mon eeepc a une mémoire de 512M. Donc je pense que vous pouvez utiliser un disque USB qui a plus de 100M d'espace. juste: mkswap/dev/sd * swapon/dev/sd *

+0

Bon travail, QinGW, je n'aurais jamais pensé à créer un espace d'échange USB! – sauf

7

ce qui se passe est que le noyau est en train de tuer le processus de liaison ld parce qu'il utilise trop de mémoire.

La raison ld est d'utiliser tant la mémoire est en raison d'une fonctionnalité appelée « split objs » qui a pour conséquence que les bibliothèques standard comme libHSbase.a contiennent 10s de milliers de petits fichiers .o minuscules. L'éditeur de liens n'est pas optimisé pour ce cas d'utilisation et finit par utiliser beaucoup de mémoire. La fonctionnalité "split objs" a pour but de réduire la taille des programmes compilés en ne reliant que les bits des bibliothèques standard réellement utilisées. Il fonctionne en divisant chaque module Haskell compilé dans un fichier séparé .o pour chaque fonction.

Donc, ceci est évidemment un problème pour les systèmes avec moins de mémoire, comme votre netbook. Il est susceptible de se produire avec tout ce que vous liez, pas seulement cabal. Il est possible de construire ghc depuis la source avec la fonction splitobjs désactivée. Par exemple, Gentoo le fait automatiquement pour les machines avec 512 Mo de RAM ou moins. Donc, si vous voulez utiliser ghc de manière fiable sur votre netbook, vous aurez probablement besoin de build it from source sans splitobjs. Vous pouvez construire ghc sur une machine légèrement plus puissante et ensuite le transférer sur votre netbook.

À l'avenir, ce problème disparaîtra lorsque nous passerons à l'utilisation de bibliothèques partagées par défaut sur Linux.

0

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