我试图为我的程序的用户提供一些Linux二进制文件,除了当前的Windows二进制文件,所以我安装了Ubuntu 11.10(因为11.04上的haskell-platform包仍然是2010版本)。 当我尝试在Ubuntu 10.04上运行生成的二进制文件时,我收到了无法findlibgmp.so.10的消息。 检查/ usr / lib显示10.04附带libgmp.so.3,而11.10附带libgmp.so.10。 因此,GHC会dynamic链接到libgmp,而不是静态链接,我认为这是默认设置。
有什么办法可以告诉GHC在二进制文件中静态包含libgmp吗? 如果没有,有没有其他的解决scheme,不需要用户安装不同版本的libgmp?
事实证明,为了静态链接二进制,静态标志是不够的。 相反,使用:
ghc -static -optl-static -optl-pthread --make yourfile.hs
使用这个,我的二进制文件在两个版本的Ubuntu上都能正常运行。
通常,旧的libgmp包也可以使用; 也就是说,使程序依赖于libgmp3c2包而不是通用的libgmp或libgmp10。 这通常可以通过编译GHC的早期版本或gmp库来实现(例如,安装libgmp3-dev而不是libgmp10-dev)。
你有ghc选项静态链接静态库。