sau*_*auf 5 haskell eeepc ghc cabal ubuntu-10.04
不是编程问题,但我第一次看到这样的东西.
UNR 1.6(基于Ubuntu 10.04)安装了6.12.1版本的GHC.
因此,为了构建cabal-install-0.8.2,我必须安装
parsec,mtl,network和zlib的libghc6-包.
然后,在启动'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 of 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 of 40]编译Main(Main.hs, dist/build/cabal/cabal-tmp/Main.o)
链接dist/build/cabal/cabal ...
collect2:ld以信号9终止[Processusarrêté]
cabal-install bootstrap期间出错:
构建cabal-install软件包失败
在链接和收集2之间(大约一分钟左右),我的硬盘驱动器的LED闪烁,
就像写入或读取了大量文件一样.
我不知道它是否相关,但这里是依赖项的版本
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
发生的事情是内核正在杀死ld链接器进程,因为它使用了太多内存.
原因ld是使用如此多的内存是因为一个名为"split objs"的功能,其结果是标准库libHSbase.a包含数以千计的小数据.o文件.链接器未针对此用例进行优化,最终使用大量内存.
"split objs"功能旨在通过仅链接实际使用的标准库的位来使编译的程序更小.它的工作原理是将每个编译的Haskell模块拆分.o为每个函数的单独文件.
所以对于内存较少的系统来说,这显然是一个问题,比如你的上网本.它可能会与您链接的任何内容发生,而不仅仅是cabal.可以在关闭splitobjs功能的情况下从源构建ghc.例如,Gentoo会自动为512Mb或更低RAM的机器执行此操作.因此,如果你想在你的上网本上可靠地使用ghc,你可能需要在没有splitobjs的情况下从源代码构建它.您可以在功能稍强的机器上构建ghc,然后将其传输到上网本.
将来,当我们在Linux上切换到默认使用共享库时,这个问题就会消失.
小智 1
我有同样的问题。我随时在 ghc- 中添加 splitobjs=NO 。.ebuild。然后我重建ghc,但cabal-install仍然无法通过ld。因为我的gentoo盒子没有交换分区。所以我用我的2G USB盘创建一个临时交换分区。然后我就可以构建 cabal-install 成功了。我发现它会使用额外的 100M 交换空间,而我的 eeepc 有 512M 内存。所以我认为你可以使用1个100M以上空间的U盘。只是: mkswap /dev/sd* swapon /dev/sd*