2016-09-12 16 views
1

私のMac OSには、1行のOCamlプログラム:print_string "hello world!\n"が書かれています。それから私はocamlopt -o test test.mlによってそれをコンパイルしました、生成されたtestはうまく動作します。Mac OSでコンパイルされた実行ファイルは、Ubuntuサーバーでは実行できません。

次に、このtestを私のUbuntu &にインストールします。ここでは、OCamlはインストールされていません。私は./testを立ち上げ、エラー:-bash: ./code: cannot execute binary file: Exec format errorを得ました。

私はサーバにOCamlをインストールし、そこに私のプログラムをコンパイルする必要がありますか?実行可能ファイルだけをUbuntuサーバーで実行できるように、Mac OSでプログラムをコンパイルすることはできないのですか?

+1

以下のJeffreyの回答以外にも、クロスコンパイル、Dockerコンテナでの実行可能ファイルのビルド、結果のバイナリ+リンクされた.soファイルのコンテナからの抽出、ターゲットホストと一致するVMでのビルドが可能です。 – hcarty

答えて

1

実行可能(バイナリ)形式は、システム間で移植できません。 ocamloptは、コンパイルを実行するシステムに固有のフォーマットを生成し、同じタイプでない限り、他のシステムで実行することは望ましくありません。

(ocamloptではなくocamlcを使用して)バイトコードにコンパイルすることで、移植性を得ることができます。しかし、バイトコードの実行ファイルはより遅く実行されます。

+0

'ocamlc -o code code.ml'とscp' code'をサーバーにコンパイルしました。サーバでは '。/ code'は' -bash:./code:/Users/softtimur/.opam/4.02.3/bin/ocamlrun:悪いインタプリタ:そのようなファイルやディレクトリはありません.'を返します。 – SoftTimur

+1

バイトコードインタープリタ(ocamlrun)は、両方のシステムで同じ場所にある必要があります。または、 "ocamlrun code"でバイトコードを実行できます。 –

+0

私はまだ 'ocamlrun'をサーバにインストールする必要がありますか?サーバーに 'ocamlrun'または' OCaml'全体をインストールするだけですか? – SoftTimur

関連する問題