当前位置: 首页 > 面试题库 >

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

薛修能
2023-03-14
问题内容

我爱得如此之多的两件事通常并不会引起我那么多的烦恼(除了我的孩子们)。我已经在工作中编写了一个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问题)。

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

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

总而言之,在这些情况下,我 确实 希望我们拥有用于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团队会认为这是当务之急。



 类似资料:
  • 问题内容: 我想创建一个jar文件来执行,该文件是使用java和clojure实现的。这是我采取的步骤。 使我的Java代码调用clojure代码 我可以生成一个具有clojure核心和我的clojure代码的jar文件(ThingOne-1.0.0-SNAPSHOT- standalone.jar),并且我还可以得到一个使用jar文件中使用clojure代码的类文件(HelloJava.clas

  • 在创建应用之前,首先我们要做的是在你的git项目上将Dockerfile文件提交上去,并且生成一个Tag或releases版本。 Dockerfile 参考 FROM nginx:latest COPY ./ /usr/share/nginx/html # ADD xxx.com.conf /etc/nginx/conf.d/ # 如果需要的话 CMD ["/bin/bash", "-c",

  • 我提取了一个包含xml、java类等的可执行jar文件。实际上,这个可执行jar文件是一个具有依赖关系的库。我需要修改这个库中一个类文件中的一行代码。我已经成功地编辑了类文件,现在我想把它重新打包到可执行的jar中。如何做到这一点。

  • 11.5 创建可执行的jar文件 让我们通过创建一个能够运行在生产环境中、完全独立且可执行的jar文件来完成我们的示例。可执行jar(有时称为“fat jar”)是包含有被编译的类以及代码运行所依赖的所有jar的归档文件。 可执行的jar和Java Java没有提供任何标准的方法来加载嵌套的jar文件(即包含在一个jar文件中的jar文件)。如果您想发布一个独立的应用程序,这可能会导致问题。 为了

  • 以下是我的cmake代码: 我尝试从链接中合并步骤,但没有工作,并得到以下错误: /usr/bin/ld:尝试动态对象的静态链接`/usr/lib/x86_64-linux-gnu/libglu.so'collect2:错误:ld返回1退出状态src/cmakefiles/wwest-export-app.out.dir/build.make:774:recipe for targe'bin/ww

  • 问题内容: 我想从我的Python项目创建一个可执行文件。用户无需安装Python就可以下载并运行它。如果我只是分发软件包,则可以使用pip,wheel和PyPI进行构建和分发,但这需要用户具有Python并且知道如何安装软件包。我可以用什么来从Python项目构建一个自包含的可执行文件? 问题答案: 这是一些常见的。除非明确指出,否则截至我上次编辑(2020年1月)时,下面列出的所有项目都将得到