2009-09-21 4 views
3

Я пытаюсь установить привязки ocaml-sqlite3, чтобы получить доступ к базе данных sqlite из программы o'caml.«Файл cma не является файлом объекта байт-кода» => Что это значит?

Конфигурирование и запуск плавно, но установка не выполняется. Поскольку файл 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 

Какова общая причина этого и вы испытали это для этой конкретной библиотеки? Я запускаю ocaml v 3.11.1, скомпилированный из источника.

EDIT: Кажется файл обеспечивается ocamlfind, возможно, проблема связана с тем, что я использую 64-среды?

+0

Я видел такую ​​ошибку раньше, но, к сожалению, я не помню, что вызвало ее. –

ответ

2

Так что, кажется, проблема исходит от различных направлений:

Во-первых, OCaml компилятор используется ocamlfind был не прав. Я понял это, посмотрев /usr/local/etc/findlib.conf. Ocamlc указывал на ocamlopt.opt, и это была версия 3.10.

Затем мне пришлось перекомпилировать findlib. Но возникла проблема, потому что я на 64 архитектуре, и некоторые элементы не были найдены, поэтому мне пришлось переконфигурировать модификацию findlib -bindir и -sitelib в основном.

Я также перекомпилировал систему ocaml с -cc «gcc -m64», но я не уверен, что это имеет какой-либо эффект.

Теперь он работает, но я должен использовать -I для добавления каталога sqlite3.cma (/ usr/lib64/ocaml/site-lib/sqlite3).

Не уверен, что кто-нибудь мог помочь :-).

2

Обычно эта ошибка появляется, когда компилятор ocaml пытается использовать двоичные файлы (cma, cmo и т. Д.), Созданные другой версией ocaml. В частности, это означает, что вам необходимо перекомпилировать все библиотеки при обновлении ocaml (даже при незначительной смене версии, например, 3.11.0 -> 3.11.1).

Возможно ли, что ocamlfind вызвал различные установки ocaml при make и make install этапов?

+0

yep вы правы, вот что я написал в своем ответе, /usr/local/etc/findlib.conf использовал ocamlopt.opt, который указывал на более старую версию ocaml. – LB40