我可以使用ocaml目标文件创建一个静态库
ar rc ./lib/libprog.a ./_build/*.cmo
我可以使用
显示libprog.a的内容ar t ./lib/libprog.a
但是我找不到任何文档说明如何将这种静态库与ocaml的编译器一起使用。
有人可以张贴一个示例(或提供一个链接)来演示如何将ocaml的编译器与libprog.a文件一起使用。请不要使用ocaml构建实用程序的任何示例,因为我想看看如何使用ocaml的编译器在命令行中完成该操作。谢谢。
答案 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