我在构建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
答案 0 :(得分:3)
通常,您不需要从源代码构建OCaml编译器,因为您始终可以从OPAM获取最新版本,该版本将为您下载,构建和安装它。但是,如果您确实需要它,请按照以下步骤操作:
./configure
make world
sudo make install
确保每一步都成功。即,echo $?
在每个命令后显示0
。
configure
脚本接受了许多有趣的选项,-prefix
选项是最重要的学习内容。有关详细的安装和构建,说明请查看位于源树顶级目录中的INSTALL.adoc
文件。
关于遗失的none.o
。 none.o
是后端实现的占位符模块,如果目标平台不支持本机代码生成,则使用该模块。因此,如果您看到该错误,则意味着您无法执行make world.opt
,因为您的体系结构没有本机代码编译器。
您仍然可以在具有合适C编译器的任何架构上安装OCaml系统和仅字节码编译器。如果您正在使用OPAM,那么有一个特殊的编译器开关
opam switch 4.04.0+bytecode-only
或者,如果您正在初始化OPAM
opam init --comp=4.04.0+bytecode-only