stack安装 - haskell解释器




制作小的haskell可执行文件? (5)

有没有什么好方法可以制作小的haskell可执行文件? 使用ghc6,一个简单的hello world程序似乎达到了370kB(在strip之前为523kB)。 C中的Hello世界大约是4kB(剥离前9kB)。


GHC静态链接所有内容(运行时本身使用的库除外,它们是动态链接的)。

在旧时代,GHC一旦您使用了它,就会将整个(haskell)库连接起来。 不久之前,GHC开始链接“per obj file”,这大大减少了二进制文件的大小。 从尺寸来看,你一定是在使用更新的GHC。

从好的方面来说,你已经拥有500K的很多东西,比如多线程核心,垃圾收集器等。

至少将垃圾收集器添加到C代码中,然后再次比较它们:)


事情正在发生变化 - 密切关注this持续的工作。


如果你的二进制文件的大小真的很重要,你可以使用工具gzexe包含一个(最好已经剥离)可执行文件和gzip压缩。 在我的64位Linux机器上,原始的hello world程序在剥离393 KB后以及剥离和压缩125 KB后需要552 KB。 gzipping的较暗的一面是性能 - 必须首先解压缩可执行文件。


您看到的大小是Haskell运行时(libHSrts.a),它静态链接到每个Haskell可执行文件。 如果它是一个共享对象,比如librt.o for C,那么你的二进制文件只有几k(库源中的分割.o文件的大小)。

如果没有在您的平台上实现libHSrts.a的动态链接,您可以通过strip使您的可执行文件更小。


strip -p --strip-unneeded --remove-section=.comment -o your_executable_small your_executable

也试着看看ldd -dr your_executable





static-linking