Как вы используете утилиту ar gcc с компилятором ocaml? - PullRequest
0 голосов
/ 25 ноября 2018

Я могу создать статическую библиотеку с объектными файлами ocaml, используя

ar rc ./lib/libprog.a ./_build/*.cmo

И я могу отобразить содержимое libprog.a, используя

ar t ./lib/libprog.a

, но не могу найтилюбая документация, объясняющая, как использовать эту статическую библиотеку с компиляторами ocaml.

Может кто-нибудь опубликовать пример (или предоставить ссылку), который демонстрирует, как использовать файл libprog.a с компиляторами ocaml.Пожалуйста, не используйте примеры утилит сборки ocaml, потому что я хочу посмотреть, как это делается в командной строке с использованием компиляторов ocaml.Спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

OCaml хочет использовать свой собственный формат архива.

$ cat a.ml
let x = 14
$ cat b.ml
let y = 17
$ cat main.ml
let () = Printf.printf "%d\n" (A.x + B.y)

$ ocamlc -c a.ml
$ ocamlc -c b.ml
$ ocamlc -a -o oclibab.cma a.cmo b.cmo

Теперь есть архив OCaml (файл .cma) с именем oclibab.cma, который содержит модули A и B:

$ ocamlobjinfo oclibab.cma
File oclibab.cma
Force custom: no
Extra C object files:
Extra C options:
Extra dynamically-loaded libraries:
Unit name: A
Interfaces imported:
    9b04ecdc97e5102c1d342892ef7ad9a2    Pervasives
    79ae8c0eb753af6b441fe05456c7970b    CamlinternalFormatBasics
    b162d96cf09fcde9d245f96359c9178a    A
Required globals:
Uses unsafe features: no
Force link: no
Unit name: B
Interfaces imported:
    9b04ecdc97e5102c1d342892ef7ad9a2    Pervasives
    79ae8c0eb753af6b441fe05456c7970b    CamlinternalFormatBasics
    bc583fd68fc2b0a4e44e3e640983c8dd    B
Required globals:
Uses unsafe features: no
Force link: no

Обратите внимание, что этот формат архива содержит цифровые подписи для интерфейсов.Это позволяет более сильную проверку во время соединения, чем обычно доступно через стандартный набор инструментов ОС (например, ar).

$ ocamlc -o main oclibab.cma main.ml
$ ./main
31
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...