Компиляция GHC с поддержкой -fPIC - PullRequest
22 голосов
/ 04 октября 2011

Я пытаюсь установить GHC с поддержкой -fPIC в Fedora. Я взял исходный архив, потому что, похоже, ни у одного из них его нет.

В 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-прим еще не скомпилирован с -FPIC Я также сказал cabal собирать любые пакеты с -fPIC и с общим доступом.

У кого-нибудь есть идеи?

EDIT: Благодаря dcouts я смог добиться определенного прогресса. Но теперь я нахожусь в точке, где я думаю, что libffi не скомпилирован с -fPIC. Я отредактировал для него make-файл (.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 статус выхода

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

После появления этой ошибки выполните следующие действия:

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 без очистки уже откомпилированных файлов. Следует пропустить их и продолжить там, где это закончилось.

0 голосов
/ 30 ноября 2017

В этой теме на странице стека Haskell есть запись часто задаваемых вопросов .

В основном говорится, что проблема связана с окружающей средой и иногда недетерминирована.

Эта проблема может быть связана с использованием в некоторых случаях флагов усиления защиты, особенно тех, которые связаны с созданием независимых от позиции исполняемых файлов (PIE).

Существует также предложение по обходу Arch Linux:

В Arch Linux установка пакета ncurses5-compat-libs из AUR решает эту проблему.

...