4

o'caml プログラムから sqlite データベースにアクセスするために、ocaml-sqlite3 バインディングをインストールしようとしています。

configure と make はスムーズに進みますが、インストールは失敗します。ファイル sqlite3.cma はバイトコード オブジェクト ファイルではないためです (以下を参照)。

    ~/Software/ocaml-sqlite3-release-1.5.6> sudo make install

[ -f *.so ] && SO_FILES=*.so; \
        ocamlfind install sqlite3 META sqlite3.cmi sqlite3.mli sqlite3.cma *.cmxa *.a *.cmx $SO_FILES
Installed /usr/lib64/ocaml/site-lib/sqlite3/dllsqlite3_stubs.so
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.cmx
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.a
Installed /usr/lib64/ocaml/site-lib/sqlite3/libsqlite3_stubs.a
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.cmxa
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.cma
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.mli
Installed /usr/lib64/ocaml/site-lib/sqlite3/sqlite3.cmi
Installed /usr/lib64/ocaml/site-lib/sqlite3/META
Updated /usr/lib64/ocaml/ld.conf
ocamlfind ocamlmktop -o sqlite3top -package "sqlite3" sqlite3.cma
The file sqlite3.cma is not a bytecode object file
make: *** [install] Error 2

その一般的な理由は何ですか?この特定の lib でそれを経験しましたか? ソースからコンパイルされた ocaml v 3.11.1 を実行しています。

編集: ファイルは ocamlfind によって提供されているようですが、問題は 64 環境を使用していることが原因である可能性があります。

4

2 に答える 2

2

したがって、問題はさまざまな方向から発生していたようです。

まず、ocamlfind で使用される ocaml コンパイラが適切ではありませんでした。/usr/local/etc/findlib.conf を見て、そのことがわかりました。ocamlc は ocamlopt.opt を指していて、それはバージョン 3.10 でした。

次に、findlib を再コンパイルする必要がありました。しかし、私は 64 のアーキテクチャーを使用しており、いくつかの要素が見つからなかったため、問題が発生しました。そのため、主に -bindir と -sitelib を変更して findlib を再構成する必要がありました。

-cc "gcc -m64" を指定して ocaml システムを再コンパイルしましたが、効果があるかどうかはわかりません。

今は動作しますが、-I を使用して sqlite3.cma (/usr/lib64/ocaml/site-lib/sqlite3) のディレクトリを追加する必要があります。

ただし、それが誰にも役立つかどうかはわかりません:-)。

于 2009-09-22T17:30:19.857 に答える
2

通常、このエラーは、ocaml コンパイラが別のバージョンの ocaml で作成されたバイナリ ファイル (cma、cmo など) を使用しようとしたときに表示されます。特に、 ocaml をアップグレードする場合 (3.11.0 -> 3.11.1 のようなマイナー バージョン シフトであっても)、すべてのライブラリを再コンパイルする必要があることを意味します。

それは ocamlfind がmakeと のmake install段階で異なる ocaml インストールを呼び出したということでしょうか?

于 2009-09-23T11:12:39.270 に答える