Nor*_*löw 6 deployment haskell dynamic-linking code-size static-linking
为什么cabal install默认情况下不使用标志--enable-shared?我注意到,在没有这个标志的情况下编译的琐碎程序,文件大小会很大.有连接吗?这是一个与Haskell程序如何在一个独立的二进制文件中轻松部署相关的设计选择吗?
我认为这与缺乏支持有关。但是,我无法直接回答 GHC 目前是否支持动态链接。GHC wiki 页面SharedLibraries/PlatformSupport已有两年历史。
\n\n在 Windows 上,我尝试使用 构建一大堆软件包--enable-shared,其中包括我编写的一个简单程序,该程序使用http-enumerator每 30 秒从 URL 下载一次。当我运行该程序时(将所有 DLL 与我的程序放在一个文件夹中之后),几秒钟后它出现了段错误。当我用 编译时--threaded,它立即出现段错误。
我在 GHC 7.0.3 中尝试过这个。该版本的文档页面显示:
\n\n\n\n\n目前,将 Haskell 库制作成 DLL 无法在 Windows 上运行;我们希望将来重新启用此功能(请参阅第 4.12 节,\xe2\x80\x9c使用共享库\xe2\x80\x9d)。...
\n
此通知在后续版本中不再出现。
\n\n顺便说一句,除了代码大小之外,静态二进制文件还有另一个麻烦。GHC 使用GMP来支持大整数。GMP 根据 LGPL 获得许可。这意味着,如果您需要分发专有的二进制文件,或者您有不兼容 GPL 的依赖项(例如 OpenSSL),则需要分发对象文件以符合 GMP 的许可证。或者,或者找到一种方法来动态链接 libgmp。我想知道该怎么做。
\n