2016-09-26 13 views
0

ocamlを4.03.0にアップグレードしました。 その後、いくつかのラッパー・ライブラリーがビルドに失敗し、「提供されたインプリメンテーションがありません」というエラーが発生しました。OCaml 4.03.0でFFIが "実装が提供されていません"とコンパイルできませんでしたエラー

私の状況を説明するための小さな例を用意します。

私は私はhello.mliで、OCamlのためのインターフェース・ファイルを準備する、hello_stubs.c

#include<stdio.h> 
#include<caml/mlvalues.h> 
CAMLprim value caml_print_hello(value unit) 
{ 
    printf("Hello\n"); 
    return Val_unit; 
} 

次ににおけるCコードを書きます。

external print_hello : unit -> unit = "caml_print_hello" 

その後、私はこれらのプログラムをコンパイルするにはmain.ml

Hello.print_hello();; 

でメインプログラムをコーディング、私は次のコマンドを実行します。

残念ながら、最後のコマンドは、次のエラーメッセージで失敗しました。メッセージによると

File "_none_", line 1: 
Warning 58: no cmx file was found in path for module Hello, and its interface was not compiled with -opaque 
File "main.ml", line 1: 
Error: No implementations provided for the following modules: 
     Hello referenced from main.cmx 

、 私はocamlc -opaque hello.mliを試してみたが、それは問題を解決していませんでした。

ocaml 4.02.3では上記のコマンドが正常に動作することも確認しました。

ocaml 4.03.0でこの例をコンパイルする方法を知っていますか?

答えて

2

修正は簡単です:hello.mliと同じ内容のhello.mlを作成し、コンパイルしてmainのリンクを作成します。

私はこれが原因4.03.0の以下の変化にあると思います:

  • PRの#4166、PRの#6956:マルクスMottlとクリストフによる力リンク外部Cプリミティブを呼び出す (ジャック・Garrigueの、レポートTroestler)

リファレンスマニュアルの関連セクションを更新する必要があります。 http://caml.inria.fr/mantis/view.php?id=7371

関連する問題