我正在尝试安装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环境?
答案 0 :(得分: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)。
不确定这可以帮助任何人: - )。
答案 1 :(得分:2)
当ocaml编译器尝试使用由另一个版本的ocaml创建的二进制文件(cma,cmo等)时,通常会出现此错误。特别是,这意味着在升级ocaml时需要重新编译所有库(即使是3.11.0 - > 3.11.1之类的小版本转换)。
可能是ocamlfind在make
和make install
阶段调用了不同的ocaml安装吗?