我試圖在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退出狀態
您嘗試編譯哪個版本的GHC? – fuz
ghc版本7.0.3 – Phyx
您是否在命令行上不需要'-optc-fpic'或者只是'-fPIC'? –