6

为什么默认不cabal install使用标志--enable-shared?我注意到,在没有此标志的情况下编译的琐碎程序会变得很大文件大小。有联系吗?这是与如何将 Haskell 程序轻松部署在单个独立二进制文件中相关的设计选择吗?

4

1 回答 1

4

我认为这与缺乏支持有关。但是,我无法直接回答 GHC 目前是否支持动态链接。GHC wiki 页面SharedLibraries/PlatformSupport 已有两年历史。

在 Windows 上,我尝试使用 构建一大堆包--enable-shared,包括我编写的一个简单程序,它使用http-enumerator每 30 秒从 URL 下载一次。当我运行程序时(在将所有 DLL 与我的程序放在一个文件夹中之后),它在几秒钟后出现了段错误。当我用 编译时--threaded,它立即出现段错误。

我在 GHC 7.0.3 中试过这个。该版本的文档页面说:

目前,将 Haskell 库转换为 DLL 无法在 Windows 上运行。我们希望在未来恢复这个设施(见第 4.12 节,“使用共享库”)。...

此通知不会出现在以后的版本中。


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

于 2011-10-21T20:34:42.667 回答