unc*_*chu 8 haskell shared-libraries ghc dockerfile
简介:我实际上是在尝试构建一个用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
Run Code Online (Sandbox Code Playgroud)
我应该用-fPIC构建GHC并用静态Haskell依赖关系链接我的库?
Dockerfile分叉debian:stretch,这里引用最后一个最重要的部分:
# ... apt-get update ... installing build-essential and other stuff ...
# see https://stackoverflow.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/{}
Run Code Online (Sandbox Code Playgroud)
这是整个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |