2009-09-21 7 views
3

J'essaye d'installer les liaisons ocaml-sqlite3, pour accéder à une base de données sqlite à partir d'un programme o'caml."Le fichier cma n'est pas un fichier objet bytecode" => Qu'est-ce que cela signifie?

La configuration et le démarrage se font en douceur, mais l'installation échoue. Parce que le fichier sqlite3.cma n'est pas un fichier objet bytecode (voir ci-dessous).

~/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 

Quelle est la raison générale pour cela et avez-vous expérimenté cela pour cette lib particulière? Je cours ocaml v 3.11.1 compilé à partir de la source.

EDIT: Il semble que le fichier est fourni par ocamlfind, peut-être le problème est dû au fait que je suis sur un environnement 64?

+0

J'ai déjà vu ce genre d'erreur, mais malheureusement, je ne me souviens pas de ce qui l'a causé. –

Répondre

2

Il semble que le problème provenait de différentes directions:

D'abord, le compilateur OCaml utilisé par ocamlfind n'a pas le droit. Je l'ai compris en regardant le fichier /usr/local/etc/findlib.conf. L'ocamlc pointait vers ocamlopt.opt et c'était la version 3.10.

Ensuite, j'ai dû recompiler findlib. Mais il y avait un problème car je suis sur une 64 architectures et certains éléments n'ont pas été trouvés, donc j'ai dû reconfigurer findlib en modifiant -bindir et -sitelib principalement.

J'ai également recompilé le système ocaml avec -cc "gcc -m64" mais je ne suis pas sûr que cela ait un effet.

Maintenant, cela fonctionne mais je dois utiliser -I pour ajouter le répertoire de sqlite3.cma (/ usr/lib64/ocaml/site-lib/sqlite3).

Pas sûr que cela pourrait aider quelqu'un si :-).

2

Habituellement, cette erreur apparaît lorsque le compilateur ocaml tente d'utiliser des fichiers binaires (cma, cmo, etc.) créés par une autre version d'ocaml. En particulier, cela signifie que vous devez recompiler toutes les bibliothèques lors de la mise à niveau d'ocaml (même avec un changement mineur de version comme 3.11.0 -> 3.11.1).

Pourrait-il être que ocamlfind invoqué différentes installations Ocaml à make et make install étapes?

+0

Oui, vous avez raison, c'est ce que j'ai écrit dans ma réponse, le /usr/local/etc/findlib.conf utilisait ocamlopt.opt qui pointait vers une ancienne version d'ocaml. – LB40

Questions connexes