这通常不是我喜欢的两件事,因为这些事情让我非常恼火(除了我的孩子).我在工作中编写了一个Haskell程序,它使用文本,xml-enumerator,attoparsec-text等库.我在工作的Windows机器上正常工作,我的Ubuntu虚拟机在工作(32位),我的Ubuntu桌面(再次32位)和运行Ubuntu(64位)的EC2实例.
我们的客户端运行的是CentOS 5.3,64位.我不能为我的生活让这个可执行文件正常运行.我尝试使用以下方法创建静态可执
ghc --make myprog.hs -optl-static -optl-pthread
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在CentOS服务器上运行该可执行文件时,我收到一条错误消息:
openFile: invalid argument (Invalid argument)
Run Code Online (Sandbox Code Playgroud)
我假设这与此处描述的错误有关.我尝试从32位和64位Ubuntu编译,尝试静态和共享版本,没有任何作用(虽然我偶尔会得到段错误而不是上面的错误消息).我可以尝试下载CentOS 5.3并为它创建一个虚拟机,但下载需要一段时间,而且我不确定哪个版本的GHC可以使用它(我尝试在他们的服务器上安装GHC 7,但我跑了进入libc问题).
在这一点上,我想出了一些可能的方法,但我想尽可能避免这些:
总而言之,这些是我真的希望我们有GHC的JVM后端的情况.我想我也可以试用LambdaVM.但我很想听听社区对这里做什么的建议.
如何删除动态依赖libgmp并从中继续:
linux-vdso.so.1 => (0x00007fffdccb1000)
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fb01afc1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
Run Code Online (Sandbox Code Playgroud)
对此(目前需要):
linux-vdso.so.1 => (0x00007fffdccb1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
Run Code Online (Sandbox Code Playgroud)
以干净,可移植的方式适用于所有GNU/Linux发行版(而不是搞乱BSD(包括OS X))?
在分发针对多个GNU/Linux发行版的单个Haskell二进制文件时,您是否看到任何其他可能导致当前所需列表中存在问题的依赖项?
笔记:
libgmp.a不起作用(如何有选择地将某些系统库静态链接到Haskell程序二进制文件?)libgmp仍然在ldd输出中列出.