2

サブディレクトリを使用してocamlbuildのプロジェクトを正常に再編成し、ocamlfindを使用したところ、トップレベルを構築するのが難しいことがわかりました。

.mltop含まれるすべてのモジュールを含むファイルを作成し、パッケージをに追加しましたが_tags、ビルドが機能しません。モジュールの1つでコンパイルされたC関数が見つかりません。オンに-classic-displayすると、そのファイルlibcside.aが含まれておらず、コンパイルもされていないことがわかります。cファイルは、myocamlbuild.mlによって依存関係として追加されます。

flag ["link"; "ocaml"; "use_cutil"] (S [A"-cclib"; A"-L."; ]);
dep  ["link"; "ocaml"; "use_cutil"] ["libcside.a"];

とで_tags

<utilities.*> : use_cutil
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql

そして最後に、libcside.clib

cutil.o

トップレベルのビルドを設定する際に何かが足りませんが、信頼できるリソースをオンラインで見つけることができません。ありがとう。

4

1 に答える 1

3
  • cutil.mlはlibcs​​ide.aのocaml側を記述していると思います-正しいですか?
  • Cutilをmltopに入れましたか?
  • 現在のプラグインでは、cutil ocamlライブラリはlibcs​​ide.aをリンクしません(depリンクではなく、ocamlbuildにビルドするように指示するだけです)
  • これは、Cスタブを使用してプロジェクトローカルのocamlライブラリを構築するための簡単な(そして機能する)方法です。myocamlbuild.mlの場合:

    ocaml_lib "linuxnet";
    let liblinuxnet_stubs = "liblinuxnet_stubs." ^ !Options.ext_lib in
    flag ["link"; "ocaml"; "use_linuxnet"] (S[A"-cclib"; A liblinuxnet_stubs;]);
    dep  ["link"; "ocaml"; "use_linuxnet"] [liblinuxnet_stubs];
    

    liblinuxnet_stubs.clibの場合:

    linuxnet_c.o
    

    linuxnet_c.c結果のオブジェクトファイルがlinuxnet.mlのオブジェクトファイルを上書きしないように(またはその逆)、Cソースが呼び出されることに注意してください。そして最後に_tagsで:

    true: use_linuxnet
    

    この設定では、トップレベルで使用できるようになります(.mltopに入れる必要がないため、Linuxnetlinuxnet.cmaがuse_linuxnetフラグ(ocaml_lib使用法で生成)によってリンクに追加されます)。

于 2010-03-04T08:39:53.243 に答える