我爱得如此之多的两件事通常并不会引起我那么多的烦恼(除了我的孩子们)。我已经在工作中编写了一个Haskell程序,该程序使用诸如文本,xml- enumerator,attoparsec-text等库。我在Windows计算机,Ubuntu虚拟机(32位), Ubuntu桌面(再次为32位)和运行Ubuntu(64位)的EC2实例。
我们的客户端正在运行64位CentOS 5.3。我无法终生使此可执行文件正常运行。我尝试使用以下方法创建静态可执行文件:
ghc --make myprog.hs -optl-static -optl-pthread
但是,当我尝试在CentOS服务器上运行该可执行文件时,出现一条错误消息:
openFile: invalid argument (Invalid argument)
我假设这与此处描述的错误有关。我已经尝试从32位和64位Ubuntu编译,尝试了静态和共享版本,但没有任何效果(尽管我偶尔会遇到segfaults而不是上面的错误消息)。我可以尝试下载CentOS 5.3并为其创建虚拟机,但是下载将花费一些时间,而且我不确定哪个版本的GHC可以运行(我尝试在他们的服务器上安装GHC 7,但是我运行了成libc问题)。
在这一点上,我想出了几种可能的方法,但我想尽可能避免使用这些方法:
总而言之,在这些情况下,我 确实 希望我们拥有用于GHC的JVM后端。我想我也可以试用LambdaVM。但是,我很想听听社区有关在这里做什么的建议。
这个简单的例子“为我工作”:
$ cat A.hs main = print "yes" $ ghc -O2 --make -static -optc-static -optl-static A.hs -fvia-C -optl-pthread $ ldd A not a dynamic executable $ ./A "yes"
(在过去的几年中,我已经通过.cabal使用此过程来为客户端提供可执行文件)。
我认为最好的办法是提交错误,并使它正常工作。IHG也可以为这样的工作提供资金,但是我很确定,如果您要运送产品,GHC团队会认为这是当务之急。