2017-01-23 21 views
3

我有一个简单的程序,似乎根本没有使用libgmp。Haskell GHC创建不依赖GMP的可执行文件?

-- Sample.hs 
main = putStrLn "hi" 

如果我在Linux上使用

的默认选项编译
$ ghc Sample.hs 

这便产生了Sample的可执行文件。我想查看一个简单程序不需要使用任意精度整数所需的库。

$ ldd Sample | sed -e 's/[(].*[)]/(0x000...)/' 
     linux-vdso.so.1 (0x000...) 
     libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x000...) 
     libm.so.6 => /lib64/libm.so.6 (0x000...) 
     librt.so.1 => /lib64/librt.so.1 (0x000...) 
     libdl.so.2 => /lib64/libdl.so.2 (0x000...) 
     libc.so.6 => /lib64/libc.so.6 (0x000...) 
     /lib64/ld-linux-x86-64.so.2 (0x000...) 
     libpthread.so.0 => /lib64/libpthread.so.0 (0x000...) 

有一些标志,我可以传递给GHC告诉它不产生取决于libgmp.so库的可执行文件。我不想静态链接libgmp,理想情况下,我想配置GHC不发出依赖于该库的代码。如果我尝试使用Integer或类似的东西,我可以减少某些功能,如错误。

+1

如果你担心LGPL许可证注意,所有你需要做的符合该是A:不发货或B的二进制文件(运行Web服务器的如常见的情况):只要出货目标代码与二进制文件一起, ;为了遵守LGPL,您需要做的只是让人们链接LGPL库的不同兼容版本。 – Cubic

回答

3

我对此一点也不确定,但看起来您可以通过告诉GHC在构建GHC时使用integer-simple而不是integer-gmp来做到这一点。具体来说,配置INTEGER_LIBRARY=integer-simple。请参阅GHC源代码树中的mk/config.mk.in

+2

是的,我之前已经完成了它,它工作正常......除了依赖于'integer-gmp'的一些库。文字是其中之一,直到我补丁(然后有人修补我的补丁)。可悲的是,这样做的套件似乎是[增长](http://packdeps.haskellers.com/reverse/integer-gmp)。 –

+0

@ThomasMDuBuisson,该列表包含'bytestring',这非常关键。如果真的取决于'integer-gmp',那会阻塞很多其他库。 – dfeuer

+1

它和其他几个都有一个整型简单标志。 –

相关问题