该文件没有正确的幻数

The file has not the right magic number

我有一个字节码,以前运行良好。今天,我试图 运行 它,我得到一个错误 the file './analyze' has not the right magic number: expected Caml1999X029, got Caml1999X023

我尝试将 OCaml 版本从 4.12.0 切换到 4.07.0,这可能是我构建字节码时的版本。当 运行 字节码时,我仍然遇到同样的错误。

有谁知道我如何 运行 这个字节码正确吗?

错误消息看起来非常合理,这表明如果您只知道它的含义,它可能会告诉您您需要知道的内容:-) 我不知道字节码幻数的结构,但它看起来喜欢一个小的差异。

您可以尝试几个不同版本的 OCaml,直到它的 ocamlc 生成与您的字节码文件相同的幻数。您可以使用 dd 查看字节码文件的幻数(抱歉,我想不出更简单的方法):

$ echo $(dd bs=12 count=1 if=m.cmo 2>/dev/null)
Caml1999O027

如您所见,我的 OCaml 版本 (4.10.0) 生成的幻数与您看到的两个中的任何一个都不同。

(重新发布我在评论中写的答案。)

根据compiler docs, the part of the magic number after X is a number which grows monotonically with versions of the compiler. So, to find out what was the version of OCaml when Caml1999X023 was in use, you can try running your bytecode against various versions of OCaml, by dichotomy; or you can reverse-engineer the compiler by looking at the history of this source file or that one,这是设置幻数的地方(我用GitHub搜索栏搜索单词“magic”)。

我为你做的:看起来你的神奇数字已由 2018 年 4 月的这 2 个提交引入:1, 2. According to the description of the first one, your version is 4.07.0 — which is consistent with OCaml’s timeline

我不知道为什么尝试这个版本对你来说失败了。我不知道你关于 js_of_ocaml-ppx 的问题的答案(在评论中)。