2010-06-29 58 views
5

不是一个编程问题,但是我第一次看到类似的东西。
UNR 1.6(基于Ubuntu 10.04)安装GHC的6.12.1版本。
因此,为了构建cabal-install-0.8.2,我必须安装
parsec,mtl,network和zlib的libghc6-软件包。
然后,推出“上海./bootstrap.sh”后,我得到:如何在eeePc 701/Ubuntu Netbook Remix 1.6(Lucid)上构建cabal-install

检查GHC-6.12.1安装的软件包...
秒差距已经安装的版本就可以了。
网络已安装且版本正常。
Cabal已安装且版本正常。
mtl已安装,版本正常。
HTTP已安装,版本正常。
zlib已安装且版本正常。
[1 1]编译主(Setup.hs,Setup.o)
链接设置...
配置小集团安装-0.8.2 ...
预处理可执行用于小集团安装-0.8.2 ...
Building cabal-install-0.8.2 ...
[1 of 40] Compiling Distribution.Client.BuildReports.Types(Distribution/Client/BuildReports/Types.hs,dist/build/cabal/cabal- tmp/Distribution/Client/BuildReports/Types.o)
[2 of 40] Compiling Distribution.Client.Utils(Distribution/Client/Utils.hs,dist/build/cabal/cabal-tmp/Distribution/Client/Utils。 o)

...大约不两个警告使用addPackageExcludeConstraint和响应...

[39 40]编译Distribution.Client.Install(配电/客户端/ Install.hs,DIST /建造/小集团/小集团-TMP/(Main.hs,dist/build/cabal/cabal-tmp/Main.o)
Linking dist/build/cabal/cabal ...
[编译/客户端/ Install.o]
[40] collect2:LD终止信号9 [突未arrêté]期间

错误小集团安装自举:
构建小集团安装包辉led

在链接和collect2(一分钟左右)之间,我的硬盘驱动器的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

+0

9是SIGKILL - 当它被杀时使用多少内存?也许这是一个OOM的情况? – 2010-06-29 21:26:02

+0

事实上,eeePc 701拥有512Mo Ram,我的交换配置为256Mo,并且在崩溃之前全部使用100%。 但是为什么连接步骤不像编译步骤那么聪明(25%Ram,40%交换)? – sauf 2010-06-29 21:47:32

+0

由于256 MB的RAM,它在OLPC XO-1上也惨遭失败。 我已经试过了我能想到的一切,以获得cabal-install的构建。 – Dan 2010-06-29 21:58:00

回答

1

我有同样的问题。我随时在ghc- 中添加splitobjs = NO。 .ebuild。然后我重建ghc,但cabal-install仍然不能通过ld。因为我的gentoo框没有交换分区。所以我使用我的2G USB磁盘创建一个临时交换分区。那么我可以建立cabal-install成功。 我发现它会使用额外的100M交换空间,我的eeepc有512M内存。所以我认为你可以使用一个超过100M空间的USB磁盘。 只是: 再用mkswap的/ dev/SD * swapon命令的/ dev/SD *

+0

QinGW,我从来没有想过要创建一个USB交换空间! – sauf 2011-03-09 00:07:56

7

发生了什么事是因为内核使用了太多的内存,内核正在杀死ld链接器进程。

ld使用这么多的内存,是因为所谓的“分裂OBJ文件”功能,它造成的后果是一样libHSbase.a标准库中包含的数以千计的微小.o文件10S的。链接器没有针对这种用例进行优化,并最终使用大量内存。

“split objs”功能旨在通过仅链接实际使用的标准库位来使编译后的程序更小。它通过将每个已编译的Haskell模块拆分为每个函数的单独.o文件来工作。

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

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

0

DD如果= /交换文件BS = 1024计数=的/ dev /零= 2048K 再用mkswap /交换文件 swapon命令/交换文件