修改 ocaml 编译器代码后链接时出错
Error while linking after modifications on ocaml compiler's code
我正在调整 OCaml(当前 trunk
分支)的源代码以将一些类型信息转储到 json
中。首先需要获取type_expr
的内存类型数据结构。在OCaml的官方toplevel中,它使用Printtyp.tree_of_type_scheme exp.exp_type
获取文件toplevel/toploop.ml
(https://github.com/ocaml/ocaml/blob/trunk/toplevel/toploop.ml#L252)中表达式的查找类型(生成类型变量名)。
虽然我尝试以最简单的形式在 typing/printtyped.ml
中使用 Printtyp
:
let tree_of_type_expr (typ : Types.type_expr) =
Printtyp.tree_of_type_scheme typ
;;
构建失败,提示找不到 Printtyp
。这是日志:
boot/ocamlrun boot/ocamlc -nostdlib -I boot -compat-32 -o ocamlc \
compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma driver/main.cmo
File "_none_", line 1:
Error: Error while linking compilerlibs/ocamlcommon.cma(Printtyped):
Reference to undefined global `Printtyp'
所以我想知道我是否遗漏了有关使用 Printtyp
的内容。谢谢。
也许您忘记更新 .depend 文件,以便它在为编译排序文件时考虑到新的依赖关系。 make depend
必须在对模块进行任何修改后完成。
编辑:
链接顺序直接在 makefile 中定义,depend 只确保文件以正确的顺序编译。
所以你需要挖掘 Makefile
并重新安排你的两个文件之间的顺序,在 github 上的当前主干中,这将是第 57 和 58 行(对于未来的人,在TYPING
)
我正在调整 OCaml(当前 trunk
分支)的源代码以将一些类型信息转储到 json
中。首先需要获取type_expr
的内存类型数据结构。在OCaml的官方toplevel中,它使用Printtyp.tree_of_type_scheme exp.exp_type
获取文件toplevel/toploop.ml
(https://github.com/ocaml/ocaml/blob/trunk/toplevel/toploop.ml#L252)中表达式的查找类型(生成类型变量名)。
虽然我尝试以最简单的形式在 typing/printtyped.ml
中使用 Printtyp
:
let tree_of_type_expr (typ : Types.type_expr) =
Printtyp.tree_of_type_scheme typ
;;
构建失败,提示找不到 Printtyp
。这是日志:
boot/ocamlrun boot/ocamlc -nostdlib -I boot -compat-32 -o ocamlc \
compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma driver/main.cmo
File "_none_", line 1:
Error: Error while linking compilerlibs/ocamlcommon.cma(Printtyped):
Reference to undefined global `Printtyp'
所以我想知道我是否遗漏了有关使用 Printtyp
的内容。谢谢。
也许您忘记更新 .depend 文件,以便它在为编译排序文件时考虑到新的依赖关系。 make depend
必须在对模块进行任何修改后完成。
编辑:
链接顺序直接在 makefile 中定义,depend 只确保文件以正确的顺序编译。
所以你需要挖掘 Makefile
并重新安排你的两个文件之间的顺序,在 github 上的当前主干中,这将是第 57 和 58 行(对于未来的人,在TYPING
)