一部のライブラリが利用できないシステム (yojson、curl、cryptokit ですが、おそらくそれほど重要ではありません) でコンパイル/リンク/実行するために OCaml プロジェクトを準備する必要があります。
これまで私は使用していました:
$ ocamlbuild -use-ocamlfind -pkgs curl,yojson,netstring,cryptokit,netclient,lablgtk2.auto-init,pgocaml tweetomat.native
一部のパッケージが欠落している場合、明らかに機能しません。私の試みは、ライブラリパスの入力を探すことでした
$ ocamlfind printconf path
不足しているライブラリのフォルダーをプロジェクトのフォルダーに手動でコピーします。ここにそれらのリストがあります
$ tree -r libs
libs/
├── yojson
│ ├── yojson.o
│ ├── yojson.mli
│ ├── yojson.cmx
│ ├── yojson.cmo
│ ├── yojson.cmi
│ ├── yojson_biniou.o
│ ├── yojson_biniou.mli
│ ├── yojson_biniou.cmx
│ ├── yojson_biniou.cmo
│ ├── yojson_biniou.cmi
│ └── META
├── curl
│ ├── META
│ ├── libcurl-helper.a
│ ├── curl.mli
│ ├── curl.cmxa
│ ├── curl.cmi
│ ├── curl.cma
│ └── curl.a
└── cryptokit
├── META
├── libcryptokit_stubs.a
├── cryptokit.mli
├── cryptokit.cmxs
├── cryptokit.cmxa
├── cryptokit.cmx
├── cryptokit.cmi
├── cryptokit.cma
└── cryptokit.a
わかりましたので、プロジェクトからすべてのファイルを段階的にコンパイルしてから、次を使用してすべてを実行可能ファイルにコンパイルしようとしました。
$ ocamlc -c twitter_oauth.mli
$ ocamlfind ocamlc -package netstring,netclient -I ./libs/cryptokit/ \
-c twitter_oauth.ml
$ ocamlc -c connection.mli
$ ocamlfind ocamlc -I ./libs/curl/ -c connection.ml
$ ocamlfind ocamlc -I ./libs/yojson/ -c parser.ml
$ ocamlfind ocamlc -package pgocaml -c sql.ml
$ ocamlfind ocamlc -package lablgtk2.auto-init,pgocaml -c gui.ml
$ ocamlfind ocamlc -package lablgtk2.auto-init,pgocaml,netstring,netclient \
-I ./libs/cryptokit/ -I ./libs/curl/ -I ./libs/yojson/ -o tweetomat \
yojson.cmo curl.cma cryptokit.cma \
twitter_oauth.cmo connection.cmo parser.cmo sql.cmo gui.cmo
しかし、私は得ています:
File "_none_", line 1:
Error: Error while linking ./libs/yojson/yojson.cmo:
Reference to undefined global `Bi_outbuf'
私は少しググったところ、yojsonは静的に構築されておらず、依存関係を満たすために「biniou」ライブラリが必要であるように見えます(静的に構築するかどうかはわかりませんが、そのように見えます)。実際、最後のコマンドを次のように変更した後 (変更はアスタリスクでマークされています):
$ ocamlfind ocamlc -package lablgtk2.auto-init,**biniou**,pgocaml,netstring,netclient \
-I ./libs/cryptokit/ -I ./libs/curl/ -I ./libs/yojson/ -o tweetomat \
**biniou.cma** yojson.cmo curl.cma cryptokit.cma \
twitter_oauth.cmo connection.cmo parser.cmo sql.cmo gui.cmo
以前のエラーは発生しませんが、新しいエラーが発生しました:
File "_none_", line 1:
Error: Error while linking ./libs/yojson/yojson.cmo:
Reference to undefined global `Easy_format'
ああ、yojson/curl/cryptokit が依存しているすべてのライブラリを含めるわけではありません >:(。助けてもらえますか?さらに、ocamlbuild を使用してそれを行う簡単な方法はありますか?