(* Save this file as 'dynlink_test.ml' * and compile it with: * ocamlc dynlink.cma dynlink_value.ml dynlink_test.ml -o dynlink_test * or: * ocamlopt dynlink.cmxa dynlink_value.ml dynlink_test.ml -o dynlink_test *) open Printf let native = Dynlink.is_native let suffix = if native then "cmxs" else "cmo" let write_test_module v = let chan = open_out "dynlink_test_module.ml" in fprintf chan "Dynlink_value.value := \"%s\"\n" v; close_out chan; let cmd = if native then "ocamlopt -c dynlink_test_module.ml &&\nocamlopt -shared dynlink_test_module.cmx -o dynlink_test_module.cmxs" else "ocamlc -c dynlink_test_module.ml" in assert (Sys.command cmd = 0) let main () = printf "testing %s ...\n" (if native then "native" else "bytecode"); write_test_module "a"; Dynlink.loadfile (sprintf "dynlink_test_module.%s" suffix); print_endline !Dynlink_value.value; write_test_module "b"; Dynlink.loadfile (sprintf "dynlink_test_module.%s" suffix); print_endline !Dynlink_value.value let () = try main () with | Dynlink.Error err -> eprintf "dynlink: %s\n" (Dynlink.error_message err)