«Файл cma не является объектным файлом байт-кода» => Что это значит? - PullRequest
3 голосов
/ 22 сентября 2009

Я пытаюсь установить привязки ocaml-sqlite3 для доступа к базе данных sqlite из программы o'caml.

Настройка и запуск выполняются без проблем, но установка завершается неудачно. Поскольку файл 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?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2009

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

Может ли это быть ocamlfindвызывал различные установки ocaml на этапах make и make install?

2 голосов
/ 22 сентября 2009

Так что, похоже, проблема шла с разных сторон:

Во-первых, компилятор 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).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...