如何有选择地将某些系统库静态链接到Haskell程序二进制文件中?

时间:2011-10-20 06:47:05

标签: haskell linker

我目前正在开发一些用Haskell编写的Web应用程序。所有Haskell库都是静态链接的;虽然这会“膨胀”可执行文件,但它并不是一个问题,因为它将是服务器上运行的唯一Haskell程序。

但是,我还想摆脱对libgmp.so的依赖,即我想将多精度库静态链接到程序中,但保留所有其他系统库(例如pthread) ,libc和libm)动态链接。

哪个链接器切换到ghc才能做到这一点?

编辑以解决附带问题

是否可以禁用标准库的默认链接,默认情况下将其引入每个Haskell程序?类似GCC的东西 - 等同于-nostdlib

2 个答案:

答案 0 :(得分:9)

dcoutts将此贴为reddit评论:

  

您可以使用ghc完全相同。

gcc -c prog.c -o prog.o
gcc prog.o libfoo.a -o prog
  

和lo,与ghc相同......

ghc -c prog.hs -o prog.o
ghc prog.o libfoo.a -o prog 

答案 1 :(得分:6)

您可以使用-optl将选项直接传递给链接器,因此要静态链接所有内容,您可以使用:

ghc --make Main.hs -optl-static -optl-pthread

或者如果你使用的是Cabal,请将它们放在GHC-Options中。

您可以进一步调整此内容,以便对静态或动态链接的内容进行更精细的控制。 -v(详细)选项有助于查看最终的链接器命令。