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