OCaml - компилировать код OCaml и C, который использует Ctypes
Я пытаюсь узнать, как вызывать подпрограммы в C непосредственно из кода OCaml, используя Ctypes
библиотека.
У меня есть этот базовый пример с двумя файлами: hello.ml
а также hello.c
,
hello.ml
выглядит так:
open Ctypes
open Foreign
let hello =
foreign "hello" (float @ -> returning void)
;;
let () =
hello 3.15
;;
hello.c
выглядит так:
#include <stdio.h>
void hello(double x)
{
if ( x > 0)
printf("hello!\n");
}
Как мне скомпилировать эти два файла в один исполняемый файл?
Процесс ручной компиляции / компоновки кода мне страшен, и я не очень хорошо его понимаю. Я обычно использую шаблон Makefile для компиляции своего кода, потому что это действительно легко.
1 ответ
Решение
Вот пример, который я использую на OS X.
в simple.c
int adder(int a, int b)
{
return a + b;
}
и в simple.ml
open Ctypes
open Foreign
let adder_ = foreign
"adder" (int @-> int @-> returning int)
let () =
print_endline (string_of_int (adder_ 1 2))
Тогда я делаю
clang -shared simple.c -o simple.so
ocamlfind ocamlopt -package ctypes.foreign -cclib simple.so -linkpkg simple.ml -o Test
./Test
И это должно распечатать 3 на терминале.