4

とをインストールnpmした後node、OCaml ファイルをコンパイルするとjs_of_ocamlエラーが発生したため、次のようにしましたopam switch reinstall system

:testweb $ opam switch reinstall system
Your system compiler has been changed. Do you want to upgrade your OPAM installation ? [Y/n] y

=-=- Upgrading system -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=   
[WARNING] base-ocamlbuild.base is not available because it requires OCaml >= 3.10 & < 4.03. Skipping.
[WARNING] camlp4.4.02+system is not available because your system doesn't comply with preinstalled &
      ocaml-version >= "4.02" & ocaml-version < "4.03". Skipping.
[WARNING] ppx_tools.4.02.3 is not available because your system doesn't comply with ocaml-version >=
      "4.02.0" & ocaml-version < "4.03.0". Skipping.
The following dependencies couldn't be met:
  - deriving -> camlp4
Your request can't be satisfied:
  - camlp4 is not available because your system doesn't comply with ocaml-version >= "4.04".

No solution found, exiting
The former package state can be restored with opam switch import "/Users/softtimur/.opam/backup/state-20160418124642.export" --switch system

ocamlfindその後、もう機能しないことに気付きました:

:testweb $ ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T
-bash: /Users/softtimur/.opam/system/bin/ocamlfind: No such file or directory

PS:node --version与えるv6.1.0; npm --version与える3.8.6; ocaml -versionを与えThe OCaml toplevel, version 4.03.0ます。 js_of_ocaml --versionでしたが2.7、落札後、opam swtich reinstall systemお譲り致し-bash: /Users/softtimur/.opam/system/bin/js_of_ocaml: No such file or directoryます。

これらすべてのパッケージに互換性を持たせるために何をすべきか知っている人はいますか?


以前:npmとをインストールした後node、実行する前のコンパイル エラーは次のopam switch reinstall systemとおりです。

:testweb $ ocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T
Failure("Ast_mapper: OCaml version mismatch or malformed input")
File "cubes.ml", line 1:
Error: Error while running external preprocessor
Command line: /Users/softtimur/.opam/system/lib/js_of_ocaml/./ppx_js '/var/folders/fn/0rmvqqbs4k76lg5g6b7kll100000gn/T/camlppxffe989' '/var/folders/fn/0rmvqqbs4k76lg5g6b7kll100000gn/T/camlppx02e06a'

別の方法でもエラーが発生しました:

:testweb $ ocamlfind ocamlc -package js_of_ocaml -syntax camlp4o -package js_of_ocaml.syntax -linkpkg -o cubes.byte cubes.ml
Fatal error: unknown C primitive `caml_is_printable'
File "cubes.ml", line 1:
Error: Error while running external preprocessor
Command line: camlp4 '-I' '/usr/local/lib/ocaml/camlp4' '-I' '/Users/softtimur/.opam/system/lib/js_of_ocaml' '-parser' 'o' '-parser' 'op' '-printer' 'p' 'pa_js.cmo'  'cubes.ml' > /var/folders/fn/0rmvqqbs4k76lg5g6b7kll100000gn/T/ocamlpp8b28e8

最初に: 私の最初の目標は、次のように記述してコンパイルするcubes.mlことです。1) Web で呼び出すことができる JS 関数を作成するために OCaml 関数をラップします。2) OCaml 関数とバイトコードは、Linux のコマンドラインでテストできます。

cubes.ml以下のとおりであります:

let () =
  let oneArgument (a: int) = a + 100 in
  Js.Unsafe.global##.jsOneArgument := Js.wrap_callback oneArgument;
  print_string "hello\n";
  exit 0

次に、を返すocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T必要があるものを生成するT必要があります。また、 の関数が他の JS または HTML ファイルから適切に呼び出されるように生成する必要があります。./Thellojs_of_ocaml T -o cubes.jscubes.jsjsOneArgumentcubes.js

パッケージを台無しにする前に、が./T返されたので、 、などをUnimplemented Javascript primitive caml_pure_js_expr!インストールしました...npmnode

4

1 に答える 1

0

OCaml 4.02.3 に戻しました。

opam switch 4.02.3

それで、

eval `opam config env`

それで、

opam install ppx_tools js_of_ocaml

その結果、 がocamlfind ocamlc -package js_of_ocaml.ppx -linkpkg cubes.ml -o T生成されT、 がjs_of_ocaml T -o cubes.js生成されcubes.jsます。node cubes.js戻りhelloます。

ただし、./Tまだ返品Unimplemented Javascript primitive caml_pure_js_expr!されます。そのために別の投稿を開きます...

于 2016-05-19T09:15:31.443 に答える