Как скомпилировать файл, который использует модуль JsooTop? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть это в файле с именем 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?

1 Ответ

0 голосов
/ 04 сентября 2018

Сначала убедитесь, что присутствуют необходимые пакеты 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. Команды выше создадут файл JavaScript с именем main.js.

...