我目前正在开发一些用Haskell编写的Web应用程序.所有Haskell库都是静态链接的; 虽然这会"膨胀"可执行文件,但它不是一个问题,因为它将是服务器上运行的唯一Haskell程序.
但是,我也想摆脱依赖libgmp.so,即我想将multiprecision库静态链接到程序中,但保持所有其他系统库(如pthread,libc和libm)动态链接.
哪个链接器切换到ghc做那个技巧?
是否可以禁用标准库的默认链接,默认情况下将其引入每个Haskell程序?像GCC这样的东西相当于-nostdlib?
dcoutts将此作为reddit评论发布:
你可以用ghc做同样的事情.
gcc -c prog.c -o prog.o
gcc prog.o libfoo.a -o prog
Run Code Online (Sandbox Code Playgroud)
而且,与ghc相同......
ghc -c prog.hs -o prog.o
ghc prog.o libfoo.a -o prog
Run Code Online (Sandbox Code Playgroud)
您可以使用-optl将选项直接传递给链接器,因此要静态链接所有内容,您可以使用:
ghc --make Main.hs -optl-static -optl-pthread
Run Code Online (Sandbox Code Playgroud)
GHC-Options如果您使用的是Cabal ,请将其放入.
您可以进一步调整此内容,以便对静态或动态链接的内容进行更精细的控制.该-v(详细)选项,就是看最后的链接命令有帮助这里.