如何编译使用 JsooTop 模块的文件?

How to compile a file that uses the JsooTop module?

我把它放在一个名为 main.ml:

的文件中
let () = JsooTop.initialize ()

我尝试使用以下方法编译文件:

ocamlfind ocamlc -package js_of_ocaml -linkpkg -o main.byte main.ml

但是出现这个错误:

File "main.ml", line 1, characters 9-27:
Error: Unbound module JsooTop

我的机器上似乎没有 JsooTop,所以我 运行 opam install js_of_ocaml-toplevel,并尝试使用以下方法再次编译文件:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml-toplevel -linkpkg -o main.byte main.ml
js_of_ocaml main.byte

但我收到警告:

来自 ocamlfind 的警告:

findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /usr/lib/ocaml, /usr/lib/ocaml/compiler-libs

来自 js_of_ocaml 可执行文件的警告:

There are some missing primitives
Dummy implementations (raising 'Failure' exception) will be used if they are not available at runtime.
You can prevent the generation of dummy implementations with the commandline option '--disable genprim'
Missing primitives provided by +dynlink.js:
  caml_add_debug_info
  caml_dynlink_add_primitive
  caml_dynlink_get_current_libs
  caml_dynlink_lookup_symbol
  caml_dynlink_open_lib
  caml_remove_debug_info
Missing primitives provided by +toplevel.js:
  caml_get_current_environment
  caml_get_section_table
  caml_invoke_traced_function
  caml_realloc_global
  caml_reify_bytecode
  caml_static_alloc
  caml_static_free
  caml_static_release_bytecode
  caml_terminfo_setup

我的问题是:编译使用 JsooTop 模块的文件的正确方法是什么?

首先,确保存在所需的 OPAM 包:

opam install js_of_ocaml js_of_ocaml-toplevel

要构建使用 JsooTop 模块的程序,请按以下方式编译文件:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml-toplevel -linkpkg -o main.byte main.ml
js_of_ocaml --toplevel --dynlink +dynlink.js +toplevel.js main.byte

请注意包含 --toplevel--dynlink+dynlink.js+toplevel.js。上面的命令将生成一个名为 main.js.

的 JavaScript 文件