Haskell 如何在eeePc 701/Ubuntu上网本混音1.6(Lucid)上构建cabal安装

Haskell 如何在eeePc 701/Ubuntu上网本混音1.6(Lucid)上构建cabal安装,haskell,ghc,cabal,ubuntu-10.04,eeepc,Haskell,Ghc,Cabal,Ubuntu 10.04,Eeepc,这不是一个编程问题,但我第一次看到这样的问题。 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已安装,版本正

这不是一个编程问题,但我第一次看到这样的问题。
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和response的两个警告

[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)
连接地区/建筑/阴谋集团/阴谋集团…
collect2:ld以信号9终止[Processus arrêté]

cabal安装引导过程中出错:
构建cabal安装包失败

在链接和收集2之间(一分钟左右),我的硬盘驱动器的LED闪烁
好像有很多文件被写入或读取

我不知道这是否相关,但以下是依赖项的版本
阴谋集团-1.8.0.2
HTTP-4000.0.6
mtl-1.1.0.2
网络-2.2.1.7
parsec-2.1.0.1

zlib-0.5.2.0

发生的情况是,内核正在杀死
ld
链接器进程,因为它使用了太多内存

ld
占用如此多内存的原因是因为一个名为“split objs”的功能,其结果是像
libHSbase.a
这样的标准库包含了10多个小型
.o
文件。链接器没有针对这个用例进行优化,最终使用了大量内存

“splitobjs”特性旨在通过只链接实际使用的标准库的位,使编译后的程序更小。它的工作原理是将每个编译好的Haskell模块拆分为每个函数的一个单独的
.o
文件

因此,对于内存较少的系统(如上网本),这显然是一个问题。这很可能发生在你链接的任何东西上,而不仅仅是
cabal
。在splitobjs功能关闭的情况下,可以从源代码构建ghc。例如,Gentoo会自动为内存小于等于512Mb的机器执行此操作。所以,如果你想在你的上网本上可靠地使用ghc,你可能需要不用它。您可以在功能稍强的机器上构建ghc,然后将其转移到您的上网本上


将来,当我们在Linux上默认使用共享库时,这个问题就会消失。

我也有同样的问题。我在ghc-…ebuild中随时添加splitobjs=NO。然后我重建了ghc,但阴谋集团的安装仍然无法通过ld。因为我的gentoo盒没有交换分区。所以我用我的2G U盘创建了一个临时交换分区。然后我就可以成功建立阴谋集团。 我发现它将使用额外的100M交换空间,我的eeepc有512M内存。所以我认为你可以使用一个超过100米空间的U盘。 只是:
mkswap/dev/sd*swapon/dev/sd*

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

9是SIGKILL-ld在被杀死时使用了多少内存?也许这是一种OOM情况?事实上,eeePc 701有512Mo Ram,我的交换配置为256Mo,并且在崩溃之前全部使用100%。但是为什么链接步骤不如编译步骤(25%Ram,40%交换)聪明呢?由于256 mb的Ram,它在OLPC XO-1上也失败得很惨。我已经尝试了所有我能想到的方法来安装阴谋集团。结果是页面交换地狱。哈斯克尔的人很有帮助,但没有找到解决办法。GHC是一种至少需要1gb的野兽。虽然Hugs很管用,但这并不能满足我的需要。我想你必须找到一个二进制软件包。。。Ubuntu还没有usb交换空间,这有点令人惊讶。干得好,QinGW,我从来没有想过要创建一个usb交换空间!