相关疑难解决方法(0)

创建一个静态Haskell Linux可执行文件

这通常不是我喜欢的两件事,因为这些事情让我非常恼火(除了我的孩子).我在工作中编写了一个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问题).

在这一点上,我想出了一些可能的方法,但我想尽可能避免这些:

  • 用另一种语言重写(在Java中这样做的想法让我感到不安,尽管这可能是尝试Cal/OpenQuark的好时机).
  • 也许试试一个替代编译器,比如jhc.但是我不太确定如何开始在jhc中安装该程序的所有依赖项; 如果人们有经验并且知道jhc中的text/attoparsec/etc工作,我很乐意听到它.
  • 所有黑客攻击:构建Windows可执行文件,在其服务器上安装wine并以这种方式运行.

总而言之,这些是我真的希望我们有GHC的JVM后端的情况.我想我也可以试用LambdaVM.但我很想听听社区对这里做什么的建议.

linux haskell ld static-linking libraries

24
推荐指数
3
解决办法
8679
查看次数

使用GHC(+ LLVM)将GMP静态链接到Haskell应用程序

  1. 如何删除动态依赖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))?

  2. 在分发针对多个GNU/Linux发行版的单个Haskell二进制文件时,您是否看到任何其他可能导致当前所需列表中存在问题的依赖项?


笔记:

haskell ghc cabal static-linking

16
推荐指数
1
解决办法
3559
查看次数

标签 统计

haskell ×2

static-linking ×2

cabal ×1

ghc ×1

ld ×1

libraries ×1

linux ×1