haskell - ghc 编译的二进制文件是否需要 GHC 还是它们是独立的?

标签 haskell linker binary executable

如果 friend 想要运行我的 Haskell 二进制文件,他是否必须先安装 Haskell,还是可以立即自行运行二进制文件?

Mac、Windows 和 Linux 上的答案相同吗?

最佳答案

GHC 确实会生成不需要安装 GHC 本身的独立二进制文件,但它们确实链接到一些动态库,尤其是 libgmp。其余的库通常在大多数 Linux 系统上都是开箱即用的。我相信 Windows 上的情况也类似。

您可以在 Linux 上使用 ldd 检查您所依赖的动态库。以下是我在 Ubuntu Natty 上获得的简单 Hello World 程序的结果:

$ echo 'main = putStrLn "Hello World"' > Hello.hs                                                   
$ ghc --make Hello.hs                                                                     
[1 of 1] Compiling Main             ( Hello.hs, Hello.o )
Linking Hello ...
$ ldd Hello                                                                                
    linux-vdso.so.1 =>  (0x00007fffe45ff000)
    libgmp.so.3 => /usr/lib/libgmp.so.3 (0x00007f8874cf9000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8874a74000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f887486b000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8874667000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f88742d3000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f88740b4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8874f7a000)

关于haskell - ghc 编译的二进制文件是否需要 GHC 还是它们是独立的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389948/

相关文章:

networking - IPv4 中如何确定有类寻址中不同类别的 block 数?

ubuntu - 使用 Ubuntu : error while loading shared libraries: libgmp. so.3 在 wsl 上配置安装 GHC 版本 7.6.3 时出错:

haskell - 无法向 Stack 项目添加额外的 deps

haskell - GHCi 对 MonadError 的默认实现是什么?

visual-studio - 如何在 VS2012 中链接静态 CUDA 运行时?

c++ - 写入二进制文件

loops - 从 Haskell 生成矢量代码?

static - 如何链接目标文件 (*.o) 和静态库文件 (*.a)

java - java 中的 Math pow 替代方案