2011-10-04 78 views
22

我試圖在Fedora中安裝使用-fPIC支持的GHC。 我已經抓住了一個源代碼壓縮包,因爲它似乎沒有二進制文件。使用-fPIC支持編譯ghc

在Build.mk我已經改變了快速構建類型

ifeq "$(BuildFlavour)" "quick" 

SRC_HC_OPTS  = -H64m -O0 -fasm -fPIC 
GhcStage1HcOpts = -O -fasm -fPIC 
GhcStage2HcOpts = -O0 -fasm -fPIC 
GhcLibHcOpts  = -O -fasm -fPIC 
SplitObjs   = NO 
HADDOCK_DOCS  = NO 
BUILD_DOCBOOK_HTML = NO 
BUILD_DOCBOOK_PS = NO 
BUILD_DOCBOOK_PDF = NO 

endif 

不幸的是,編譯我仍然得到LD錯誤

ghc -fglasgow-exts --make -shared -oHs2lib.a /tmp/Hs2lib924498/Hs2lib.hs dllmain.o -static -fno-warn-deprecated-flags -O2 -package ghc -package Hs2lib -i/home/phyx/Documents/Haskell/Hs2lib -optl-Wl,-s -funfolding-use-threshold=16 -optc-O3 -optc-ffast-math 
Linking a.out ... 
/usr/bin/ld: /tmp/Hs2lib924498/Hs2lib.o: relocation R_X86_64_32 against `ghczmprim_GHCziUnit_Z0T_closure' can not be used when making a shared object; recompile with -fPIC 
/tmp/Hs2lib924498/Hs2lib.o: could not read symbols: Bad value 

時如此看來,GHC-拘謹仍然ISN用-FPIC 編譯我還告訴cabal使用-fPIC和共享來構建任何包。

任何人有任何想法?

編輯: 感謝dcouts我已經能夠取得一些進展。但是現在我正處於我沒有用-fPIC編譯libffi的地步。我爲它編輯了makefile(.in),但到目前爲止,沒有運氣。

新的命令是:

ghc -fPIC -shared dllmain.o Hs2lib.o /usr/local/lib/ghc-7.0.3/libHSrts.a -o Hs2lib.so 

其中dllmain.c和Hs2lib.hs雙雙使用-fPIC編譯。 我得到的錯誤是:

/usr/bin/ld: /usr/local/lib/ghc-7.0.3/libHSffi.a(closures.o): relocation R_X86_64_32 
against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/ghc-7.0.3/libHSffi.a: could not read symbols: Bad value 

collect2:LD返回1退出狀態

+0

您嘗試編譯哪個版本的GHC? – fuz

+0

ghc版本7.0.3 – Phyx

+0

您是否在命令行上不需要'-optc-fpic'或者只是'-fPIC'? –

回答

1

後您看到此錯誤,請執行下列操作:

cd /tmp/Hs2lib924498/ 
ghc -fglasgow-exts --make -shared -oHs2lib.a /tmp/Hs2lib924498/Hs2lib.hs dllmain.o -static -fno-warn-deprecated-flags -fPIC -O2 -package ghc -package Hs2lib -i/home/phyx/Documents/Haskell/Hs2lib -optl-Wl,-s -funfolding-use-threshold=16 -optc-O3 -optc-ffast-math 

注意我加-fPIC的失敗ghc命令。

命令執行成功後,從tmp目錄中繼續編譯而不清除已編譯的文件。它應該跳過它們並繼續它結束的地方。

+1

僅此而已,不幸的是不會這樣做。看來我在這裏發佈的命令版本缺少-fPIC,但這已經在命令中。 dllmain.c也用-fPIC編譯。自從我發佈這個問題以來,我已經取得了一些進展,現在我已經到了libFFI是問題的地步。我聽說build.mk對它的編譯沒有影響,所以我試圖通過配置文件來支持它,但到目前爲止沒有運氣。 – Phyx

+0

編譯器現在說什麼?你能發佈新的命令和錯誤消息嗎? – 2011-12-11 02:48:18

+0

我可以發佈一次,我在幾天後回到家 – Phyx

0

在Haskell Stack頁面上有關於此主題的FAQ entry

它基本上說問題是環境相關的,有時是不確定的。

該問題可能與在某些情況下使用硬化標誌有關,特別是與生成位置無關的可執行文件(PIE)相關的問題。

還有一個變通的建議爲Arch Linux的:

在Arch Linux的,從安裝在AUR ncurses5-COMPAT-libs軟件包解決此問題。