簡體   English   中英

如何在eeePc 701 / Ubuntu Netbook Remix 1.6(Lucid)上構建cabal-install

[英]how can I build cabal-install on eeePc 701 / Ubuntu Netbook Remix 1.6 (Lucid)

不是一個編程問題,但我第一次看到這樣的東西。
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/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閃爍
好像很多文件都被寫入或讀取。

我不知道它是否相關,但這里是依賴項的版本
驚天動地-1.8.0.2
HTTP-4000.0.6
MTL-1.1.0.2
網絡2.2.1.7
秒差距-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上切換到默認使用共享庫時,這個問題就會消失。

我有同樣的問題。 我在ghc-中隨時添加splitobjs = NO 的.ebuild。 然后我重建ghc,但cabal-install仍然無法通過ld。 因為我的gentoo框沒有交換分區。 所以我用2G usb磁盤創建一個臨時交換分區。 然后我可以建立cabal-install成功。 我發現它將使用額外的100M交換空間,而我的eeepc有512M內存。 所以我認為你可以使用一個超過100M空間的USB磁盤。 只是:mkswap / dev / sd * swapon / dev / sd *

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM