昔はもっと面倒だったと思うのですが、いつの間にか動くようになっていました。OCaml 4.07
, ctypes 0.11.5
で確認。
ocamloptでは普通に.o
をリンクするだけでctypes
で作った関数が呼び出せる。
ocamlcではできない。
open Ctypes open Foreign let f = foreign "f" (void @-> returning int) let _ = Format.printf "%d@." @@ f ()
int f () { return 100; }
OCAMLC=ocamlfind ocamlc -package ctypes,ctypes.foreign OCAMLOPT=ocamlfind ocamlopt -package ctypes,ctypes.foreign test.x: lib.o main.cmx ${OCAMLOPT} -o $@ -linkpkg $^ test: lib.o main.cmo ${OCAMLC} -o $@ -linkpkg $^ clean: rm *.o *.cm? *.so # 使ってない lib.so: lib.o gcc -shared $^ -o $@ %.o: %.c gcc -c $< %.cmo: %.ml ${OCAMLC} -c $< %.cmx: %.ml ${OCAMLOPT} -c $<