2010-06-29 57 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命令/交換文件