как я могу собрать cabal-install на eeePc 701 / Ubuntu Netbook Remix 1.6 (Lucid)

Не вопрос программирования, но впервые вижу что-то подобное.
UNR 1.6 (на основе Ubuntu 10.04) устанавливает версию GHC 6.12.1.
Итак, чтобы собрать cabal-install-0.8. 2, мне нужно установить libghc6- пакеты parsec, mtl, network и zlib.
Затем, запустив sh ./bootstrap.sh, я получаю:

Проверка установленных пакетов для ghc-6.12.1 ...
parsec уже установлен, и версия в порядке.
сеть уже установлена, и версия в порядке.
Cabal уже установлен, и версия в порядке .
mtl уже установлен, и версия в норме.
HTTP уже установлен, и версия в норме.
zlib уже установлен, и версия в норме.
[1 из 1] Компиляция Main (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 и ответе ...

[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 [Processus arrêté]

Ошибка во время начальной загрузки cabal-install:
Сбой сборки пакета cabal-install

Между связыванием и сбором2 (около минуты) светодиод на моем жестком диске мигает
как будто много файлов записывается или читается.

Не знаю, актуально ли это, но вот версии зависимостей
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


person sauf    schedule 29.06.2010    source источник
comment
9 - это SIGKILL - сколько памяти использует ld, когда его убивают? Может, это OOM-ситуация?   -  person Thomas M. DuBuisson    schedule 30.06.2010
comment
Действительно, eeePc 701 имеет 512 МБ ОЗУ, а мой своп настроен на 256 МБ, и все используется на 100% до сбоя. Но почему этап компоновки не такой умный, как этап компиляции (25% RAM, 40% своп)?   -  person sauf    schedule 30.06.2010
comment
Он также терпит неудачу на OLPC XO-1 из-за 256 Мб оперативной памяти. Я перепробовал все, что мог придумать, чтобы собрать cabal-install.   -  person Dan    schedule 30.06.2010
comment
Заканчивается адом подкачки страниц. Ребята из #haskell были полезны, но решения не нашли. GHC - это чудовище, которому требуется минимум 1 ГБ. Хотя Hugs работает, но это не решение для моих нужд.   -  person Dan    schedule 30.06.2010
comment
Думаю, вам придется найти двоичный пакет ... немного удивительно, что в Ubuntu его еще нет.   -  person Thomas M. DuBuisson    schedule 30.06.2010
comment
@TomMD: спасибо, у них есть cabal-install (0.8.0-1), и я должен был проверить! (но все же жаль, что на маленькой машине не построить).   -  person sauf    schedule 30.06.2010


Ответы (3)


У меня такая же проблема. Я добавляю splitobjs = NO в любое время в ghc- . .ebuild. затем я перестраиваю ghc, но cabal-install по-прежнему не может пройти ld. потому что у моего Gentoo нет раздела подкачки. Поэтому я использую свой USB-диск 2 ГБ для создания одного временного раздела подкачки. тогда я смогу добиться успеха в установке кабала. Я обнаружил, что он будет использовать дополнительные 100 МБ пространства подкачки, а мой eeepc имеет 512 МБ памяти. Поэтому я думаю, что вы можете использовать один USB-диск, на котором больше 100 МБ свободного места. просто: mkswap / dev / sd * swapon / dev / sd *

person QinGW    schedule 02.03.2011
comment
Хорошая работа, QinGW, я бы никогда не подумал о создании пространства подкачки USB! - person sauf; 09.03.2011

Что происходит, так это то, что ядро ​​убивает процесс компоновщика ld, потому что он использует слишком много памяти.

Причина, по которой ld использует так много памяти, заключается в функции, называемой «разделение объектов», следствием которой является то, что стандартные библиотеки, такие как libHSbase.a, содержат десятки тысяч крошечных файлов .o. Компоновщик не оптимизирован для этого варианта использования и в конечном итоге использует много памяти.

Функция «split objs» предназначена для уменьшения размера скомпилированных программ за счет связывания только тех битов стандартных библиотек, которые фактически используются. Он работает путем разделения каждого скомпилированного модуля Haskell на отдельный .o файл для каждой функции.

Так что это, очевидно, проблема для систем с меньшим объемом памяти, таких как ваш нетбук. Это может произойти с чем угодно, на что вы ссылаетесь, а не только с cabal. Можно собрать ghc из исходного кода с отключенной функцией splitobjs. Например, Gentoo делает это автоматически для машин с 512 МБ ОЗУ или меньше. Поэтому, если вы хотите надежно использовать ghc на своем нетбуке, вам, вероятно, потребуется построить его из исходного кода без splitobjs. Вы можете собрать ghc на немного более мощной машине, а затем перенести его на свой нетбук.

В будущем эта проблема исчезнет, ​​когда мы перейдем на использование разделяемых библиотек по умолчанию в Linux.

person Duncan Coutts    schedule 29.06.2010

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

person 田咖啡    schedule 30.10.2013