4

我正在尝试安装 ocaml-sqlite3 绑定,以从 o'caml 程序访问 sqlite 数据库。

配置和制作顺利,但安装失败。因为文件 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架构的,有些元素没有找到,所以我只好重新配置findlib修改-bindir和-sitelib为主。

我还用 -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 在makemake install阶段调用了不同的 ocaml 安装吗?

于 2009-09-23T11:12:39.270 回答