由于caml_oldify_local_roots,OCaml编译失败

时间:2017-11-22 16:39:25

标签: gcc ocaml

我在构建OCaml时遇到了问题。它似乎是libasmrun.a的一个问题,但错误是非常神秘的(至少对我而言)。

谁能告诉我这里有什么问题?我正在尝试构建OCaml 4.04.0。运行Ubuntu 16.04,gcc版本4.7.2

roots.c: In function ‘caml_oldify_local_roots’:
roots.c:306:19: warning: implicit declaration of function ‘Saved_return_address’ [-Wimplicit-function-declaration]
     retaddr = Saved_return_address(sp);
               ^
roots.c:316:46: warning: implicit declaration of function ‘Callback_link’ [-Wimplicit-function-declaration]
     struct caml_context * next_context = Callback_link(sp);ng
                                          ^
roots.c:316:46: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
roots.c: In function ‘caml_do_local_roots’:
roots.c:492:46: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
     struct caml_context * next_context = Callback_link(sp);
                                          ^
backtrace_prim.c: In function ‘caml_next_frame_descriptor’:
backtrace_prim.c:55:13: warning: implicit declaration of function ‘Saved_return_address’ [-Wimplicit-function-declaration]
   *pc = Saved_return_address(*sp);
         ^
backtrace_prim.c:63:44: warning: implicit declaration of function ‘Callback_link’ [-Wimplicit-function-declaration]
   struct caml_context * next_context = Callback_link(*sp);
                                        ^
backtrace_prim.c:63:44: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
make[4]: *** No rule to make target 'none.o', needed by 'libasmrun.a'. Stop.
make[3]: *** [makeruntimeopt] Error 2
make[2]: *** [opt-core] Error 2
make[1]: *** [opt.opt] Error 2
make: *** [world.opt] Error 2

1 个答案:

答案 0 :(得分:3)

通常,您不需要从源代码构建OCaml编译器,因为您始终可以从OPAM获取最新版本,该版本将为您下载,构建和安装它。但是,如果您确实需要它,请按照以下步骤操作:

./configure
make world 
sudo make install 

确保每一步都成功。即,echo $?在每个命令后显示0

configure脚本接受了许多有趣的选项,-prefix选项是最重要的学习内容。有关详细的安装和构建,说明请查看位于源树顶级目录中的INSTALL.adoc文件。

关于遗失的none.onone.o是后端实现的占位符模块,如果目标平台不支持本机代码生成,则使用该模块。因此,如果您看到该错误,则意味着您无法执行make world.opt,因为您的体系结构没有本机代码编译器。

您仍然可以在具有合适C编译器的任何架构上安装OCaml系统和仅字节码编译器。如果您正在使用OPAM,那么有一个特殊的编译器开关

opam switch 4.04.0+bytecode-only

或者,如果您正在初始化OPAM

opam init --comp=4.04.0+bytecode-only