Как мне перекомпилировать GHC с -fPIC?

Введение: я на самом деле пытаюсь создать разделяемую библиотеку, написанную на Haskell, совместимую с C (можно использовать из кода C, не зная, что она написана на Haskell), но я хочу, чтобы все зависимости Haskell были статически связаны, сейчас я могу только динамически связывать все зависимости (для каждого пакета, включая пакеты "base" и "ghc-prim". Этот эксперимент представлен здесь.

Я попытался решить эту проблему, написав Dockerfile, где я собираю GHC 8.2.2 с нуля с замененным файлом mk/build.mk с этим содержимым (я просто сделал то же самое, что видел в других проблемах переполнения стека, подобных этой), но когда я пытаюсь связать с --make -static -shared -fPIC Я получаю много подобных ошибок при связывании "ghc-prim", пример последнего:

/usr/bin/ld.gold: error: /ghc-8.2.2-fpic/lib/ghc-8.2.2/ghc-prim-0.5.1.1/libHSghc-prim-0.5.1.1.a(Classes.o): requires dynamic R_X86_64_PC32 reloc against 'stg_ap_0_fast' which may overflow at runtime; recompile with -fPIC

Что я должен сделать, чтобы собрать GHC с -fPIC и связать мою библиотеку со статическими зависимостями Haskell?

Dockerfile раздвоенный от debian:stretch Вот цитата из последней наиболее важной части:

# ... apt-get update ... installing build-essential and other stuff ...

# see https://stackru.com/a/28131655/774228
# for info about customizations in 'build.mk'
COPY my-build.mk /my-build.mk

RUN mkdir /compile && cd /compile \
    && wget https://downloads.haskell.org/~ghc/8.2.2/ghc-8.2.2-src.tar.xz \
    && tar -xvf ghc-8.2.2-src.tar.xz \
    && rm ghc-8.2.2-src.tar.xz \
    && cd ghc-8.2.2/ \
    && ./configure --prefix=/ghc-8.2.2-fpic --disable-library-profiling --enable-shared \
    && cp /my-build.mk mk/build.mk \
    && make install \
    && cd /usr/local/bin \
    && ls /ghc-8.2.2-fpic/bin/ | xargs -I{} ln -s /ghc-8.2.2-fpic/bin/{}

А вот целое my-build.mk файл:

SRC_HC_OPTS          = -H64m -O
EXTRA_HC_OPTS        = -fPIC
SRC_CC_OPTS          = -fPIC -O
GhcStage1HcOpts      = -fasm -O0
GhcStage2HcOpts      = -fasm -O0
GhcLibHcOpts         = -fasm -O2
GhcLibWays           = v dyn
DYNAMIC_GHC_PROGRAMS = YES
DYNAMIC_BY_DEFAULT   = NO
SplitObjs            = NO
HADDOCK_DOCS         = NO
BUILD_DOCBOOK_HTML   = NO
BUILD_DOCBOOK_PS     = NO
BUILD_DOCBOOK_PDF    = NO
V                    = 1
LATEX_DOCS           = NO
HSCOLOUR_SRCS        = NO
BeConservative       = YES

0 ответов

Другие вопросы по тегам