2010-06-29 11 views
5

No es una pregunta de programación, pero la primera vez que veo algo como esto.
UNR 1.6 (basado en Ubuntu 10.04) instala la versión 6.12.1 de GHC.
Entonces, para construir cabal-install-0.8.2, tengo que instalar
libghc6- paquetes de parsec, mtl, network y zlib.
Entonces, después de lanzar './bootstrap.sh sh', me sale:¿cómo puedo construir cabal-install en eeePc 701/Ubuntu Netbook Remix 1.6 (Lucid)

Comprobación de paquetes instalados para GHC-6.12.1 ...
parsec ya está instalado y la versión es aceptable.
la red ya está instalada y la versión está bien.
Cabal ya está instalado y la versión está bien.
mtl ya está instalado y la versión está bien.
HTTP ya está instalado y la versión está bien.
zlib ya está instalado y la versión está bien.
[1 de 1] La compilación principal (Setup.hs, Setup.o)
Vinculación Configuración ...
Configuración de Cabal-instalación-0.8.2 ...
ejecutables de preprocesamiento de Cabal-instalación-0.8.2 ...
Edificio cabal-install-0.8.2 ...
[1 of 40] Compilación Distribution.Client.BuildReports.Types (Distribución/Cliente/BuildReports/Types.hs, dist/build/cabal/cabal- tmp/Distribution/Client/BuildReports/Types.o)
[2 of 40] Compilación Distribution.Client.Utils (Distribution/Client/Utils.hs, dist/build/cabal/cabal-tmp/Distribution/Client/Utils. o)

... dos advertencias sobre no utilizados addPackageExcludeConstraint y la respuesta ...

[39 de 40] Compilar Distribution.Client.Install (Distribución/Client/Install.hs, dist/build/Cabal/Cabal-tmp/Distribution/Client/Install.o)
[40 of 40] Compilación Main (Main.hs, dist/build/cabal/cabal-tmp/Main.o)
Enlazando dist/build/cabal/cabal ...
collect2: LD termina con la señal 9 [arrêté Processus]

Error de Cabal a instalar de arranque:
Construir el paquete fai Cabal-instalar led

Entre linking y collect2 (un minuto más o menos), el LED de mi disco duro brilla
como si se escribieran o leyeran muchos archivos.

No sé si es relevante, pero aquí están las versiones de las dependencias
Cabal-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
red 2.2.1.7
parsec-2.1.0.1
zlib-0.5.2.0

+0

9 es SIGKILL: ¿cuánta memoria está usando cuando muere? Tal vez esta es una situación OOM? –

+0

De hecho, eeePc 701 tiene 512Mo Ram y mi swap está configurado para 256Mo y todo se usa 100% antes del colapso. ¿Pero por qué el paso de vinculación no es tan inteligente como el paso de compilación (25% Ram, 40% swap)? – sauf

+0

También falla miserablemente en OLPC XO-1s, debido a los 256 mb de RAM. He intentado todo lo que puedo pensar para conseguir Cabal-instalación para construir. – Dan

Respuesta

1

que tienen el mismo problema. Agregué splitobjs = NO en cualquier momento en ghc- . .ebuild. luego reconstruyo ghc, pero cabal-install todavía no puede pasar ld. porque mi caja de gentoo no tiene una partición de intercambio. Entonces utilizo mi disco usb 2G para crear una partición de intercambio temporal. entonces puedo construir el éxito de instalación cabal. Encontré que utilizará un espacio de intercambio adicional de 100M y mi eeepc tiene una memoria de 512M. Así que creo que puedes usar un disco usb que tenga más de 100M de espacio. simplemente: mkswap/dev/sd * swapon/dev/sd *

+0

¡Buen trabajo, QinGW, nunca hubiera pensado en crear un espacio de intercambio de usb! – sauf

7

Lo que está sucediendo es que el kernel está matando el proceso del enlazador ld porque está usando demasiada memoria.

La razón ld está utilizando tanto la memoria se debe a una característica llamada "objs divididas", que tiene como consecuencia que las bibliotecas estándar como libHSbase.a contienen 10s de miles de diminutos .o archivos. El enlazador no está optimizado para este caso de uso y termina usando mucha memoria.

El "split objs" característica está diseñada para hacer que los programas compilados mucho más pequeño enlazando sólo los bits de las bibliotecas estándar que se utilizan en realidad. Funciona al dividir cada módulo Haskell compilado en un archivo separado .o para cada función.

Así que esto es obviamente un problema para los sistemas con menos memoria, al igual que su netbook. Es probable que suceda con cualquier cosa que enlace, no solo cabal. Es posible construir ghc desde la fuente con la función splitobjs desactivada. Por ejemplo, Gentoo hace esto automáticamente para máquinas con 512Mb de RAM o menos. Por lo tanto, si desea utilizar ghc de manera confiable en su netbook, probablemente necesite build it from source sin splitobjs. Puede construir ghc en una máquina ligeramente más poderosa y luego transferirlo a su netbook.

En el futuro este problema va a desaparecer cuando cambiamos a la utilización de las bibliotecas compartidas por defecto en Linux.

0

dd if =/dev/zero of =/archivo de intercambio bs = 1024 count = 2048k mkswap/archivo de intercambio swapon/archivo de intercambio

Cuestiones relacionadas