您如何在ocaml的编译器中使用gcc的ar实用程序?

时间:2018-11-25 20:26:45

标签: ocaml

我可以使用ocaml目标文件创建一个静态库

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

我可以使用

显示libprog.a的内容
ar t ./lib/libprog.a

但是我找不到任何文档说明如何将这种静态库与ocaml的编译器一起使用。

有人可以张贴一个示例(或提供一个链接)来演示如何将ocaml的编译器与libprog.a文件一起使用。请不要使用ocaml构建实用程序的任何示例,因为我想看看如何使用ocaml的编译器在命令行中完成该操作。谢谢。

1 个答案:

答案 0 :(得分:3)

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

现在有一个名为oclibab.cma的OCaml存档(.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

请注意,此存档格式包含接口的数字签名。与通过OS的常规工具链(如ar)通常可以使用的链接相比,这可以在链接时进行更强大的检查。

$ ocamlc -o main oclibab.cma main.ml
$ ./main
31