Deployment 部署中的Haskell静态链接与动态链接

Deployment 部署中的Haskell静态链接与动态链接,deployment,haskell,dynamic-linking,static-linking,code-size,Deployment,Haskell,Dynamic Linking,Static Linking,Code Size,为什么不cabalinstall使用标志——默认启用共享?我注意到,在没有这个标志的情况下编译的普通程序,文件大小会变得很大。有连接吗?这是否与Haskell程序如何在一个独立的二进制文件中轻松部署有关?我认为这与缺乏支持有关。然而,对于GHC目前是否支持动态链接,我无法得到一个直接的答案。GHC wiki页面已有两年历史 在Windows上,我尝试用--enable shared构建一整套软件包,其中包括我编写的一个简单程序,用于每30秒从URL下载一次。当我运行程序时(将所有DLL放入程序所

为什么不
cabalinstall
使用标志——默认启用共享?我注意到,在没有这个标志的情况下编译的普通程序,文件大小会变得很大。有连接吗?这是否与Haskell程序如何在一个独立的二进制文件中轻松部署有关?

我认为这与缺乏支持有关。然而,对于GHC目前是否支持动态链接,我无法得到一个直接的答案。GHC wiki页面已有两年历史

在Windows上,我尝试用
--enable shared
构建一整套软件包,其中包括我编写的一个简单程序,用于每30秒从URL下载一次。当我运行程序时(将所有DLL放入程序所在的文件夹后),它在几秒钟后出现故障。当我使用
--threaded
编译时,它立即出现故障

我在GHC7.0.3中试过这个。A说:

将Haskell库转换为DLL目前在Windows上不起作用;我们希望将来重新安装该设施(见第4.12节“使用共享库”)

此通知不会出现在更高版本中



顺便说一下,除了代码大小之外,静态二进制文件还有另一个麻烦。GHC使用它的大整数支持。GMP根据LGPL获得许可。这意味着,如果您需要分发专有二进制文件,或者如果您具有与GPL不兼容的依赖项(例如OpenSSL),则需要分发您的目标文件以符合GMP的许可。或者,或者找到一种方法使libgmp动态链接。我想知道如何做到这一点。

ISTR共享库支持是相当新的,不适用于所有平台,也使分发可执行文件变得更加困难。而且空间很便宜,谁在乎呢?不过会有更好的答案。@luqui:空间可能很便宜,但带宽呢?如果您需要通过Internet向连接不理想的客户端推送20MB程序的更新,该怎么办?另请参见此答案截至2015年3月是否仍然有效?