как я могу собрать cabal-установку на eeePc 701 / Ubuntu Netbook Remix 1.6 (Lucid) - PullRequest
5 голосов
/ 30 июня 2010

Не вопрос программирования, но в первый раз я вижу что-то подобное.
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 ...
Building 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 (Распределение/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-установки:
Ошибка сборки пакета установки cabal

Между подключением и collect2 (минутой или около того), светодиод моего жесткого диска мерцает
, как будто многофайлов пишутся или читаются.

Не знаю, насколько это актуально, но вот версии зависимостей
Cabal-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
network-2.2.1.7
парсек-2.1.0.1
zlib-0.5.2.0

Ответы [ 3 ]

7 голосов
/ 30 июня 2010

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

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

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

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

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

1 голос
/ 02 марта 2011

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

0 голосов
/ 30 октября 2013

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

...