无法用ocaml(ocamlopt)和float编译

时间:2012-01-13 15:50:52

标签: ocaml

我在使用ocamlopt和floats进行编译时出现问题

我在Ubuntu 10.04和Ocaml 3.11下

这一行:

let a = 10.0;;

无需担心顶级

不用担心ocamlc(test.ml文件中的代码):

ocamlc -o exec test.ml
ocamlopt错误

ocamlopt -o exec test.ml
消息:

  

文件“test.ml”,第1行,字符0-1:   错误:汇编程序错误,文件/tmp/camlasm5c3d4d.s

中的输入

这是从哪里来的?

编辑:问题解决了,3.12解决了bug

谢谢你们:)

3 个答案:

答案 0 :(得分:3)

使用/ OCaml 3.11.1,3.12.0,3.12.2和OCaml 3.13.0 + dev8编译该行没有问题。将以下内容添加到ocamlopt编译行,以查看问题的确实发生位置,

-verbose -ccopt -v -cclib -v

你将能够看到ocamlopt向外部程序抛出的行,以及他们如何执行命令。这可能是gcc的一个问题。多版本冲突?在这种情况下,您将不得不重新编译OCaml。我记得gcc并且Linux内核在Ubuntu 11.04中有主要的版本更新,你可能会遇到类似的东西。系统上应该有其他版本的gcc,请尝试gcc-4.4。您使用的是OCaml提供的软件包还是自己编译过程?

答案 1 :(得分:3)

OCaml本机编译器通过生成汇编代码并调用系统的汇编程序来组装它。您的编译器似乎正在生成汇编程序无法接受的汇编代码。正如nlucaroni所说,这是某种版本不匹配。 OCaml编译器(基本上)期望一个不同于它的汇编程序。

如果你显示nlucaroni建议的选项的输出,它可能会暗示出现了什么问题。查看编译器生成的汇编文件/tmp/camlasm5c3d4d.s可能也很有趣。

看到

的输出可能也很有趣
ocamlopt -config

这将显示它正在尝试运行的汇编程序以及其他有用的信息。

不幸的是,我不相信汇编程序可以从ocamlopt的命令行进行配置。我实际上已经通过创建一个假装成汇编程序的脚本来修复这个问题(为真正的汇编程序指定额外的标志)。如果你不喜欢这样的黑客行为,那么你可能不得不向打包你的OCaml的人寻求帮助。

答案 2 :(得分:3)

它看起来像known issue,并且该错误仅出现在binutils和ocaml的特定组合中,不应出现在Ubuntu 10.04的官方软件包中。你只使用官方套餐吗?如果是这样,你能提供你的binutils和ocaml的确切版本吗?

上述bug报告中有一个ocaml补丁,但更容易解决的问题是如果可以的话就升级。如果您只使用官方软件包,则应该向Ubuntu提交bug报告,以便修复软件包。