[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2009-12-30 (23:30) |
From: | Guillaume Yziquel <guillaume.yziquel@c...> |
Subject: | Re: [Caml-list] problem creating .cma library |
rouanvd@softwarerealisations.com a écrit : > Hi everyone. Hi. > I am using ocaml 3.11.0 with the MingW toolchain on windows (vista). Cannot help you much there. > Now I create the mylib_stub.c file which contains the marshalling code > between the libmylib.dll library and ocaml. This file contains the > following C code: > > ======================================= > #include <stdio.h> > #include <caml/mlvalues.h> > #include "../mylib/mylib.h" > > CAMLprim value > my_print_stub(value v) { CAMLparam1(v); /* is missing here, for garbage collection purposes. */ > char* str = (char*)String_val( v ); /* You do not need the right-hand side (char*) casting. */ > my_print( str ); > > return Val_unit; > } > When I finaly build the test ocaml app which is supposed to use the > mylib.cma library, ocamlc tells me: > > "Unbound module Mylib" Firs of all, mylib.cma is simply an archive of OCaml modules. It may contain multiple modules, and might not contain a module called Mylib. You have to ensure that mylib.cmo is included in mylib.cma. Moreover, when you create mylib.cma, you also need a compiled interface, i.e. a mylib.cmi file. It's an interface for mylib.cmo. Without it, there's no description of module Mylib in mylib.cma. > The command used to compile the test app is > > ocamlc -verbose mylib.cma -c Main.ml You've got something fundamentally wrong here: Out of main.ml (lower case for the the first letter), you first create a main.cmo file. And also a main.mli file with ocamlc -i. You compile the main.mli file to main.cmi. Then you create the mylib.cma archive from main.cmo and main.cmi. And mylib.cma will contain the module Main. Not the module Mylib. > The Main.ml file contains the following code: > > ======================================= > open Mylib > > let main () = > my_print "my_print = ok" > > > main () > ======================================= Here, you're declaring the submodule Mylib of the module Main. Also known as Main.Mylib. Not as Mylib. > Is there a way to verify that the .cma library was created correctly? There are some tools, such as ocamldumpobj and ocamlobjinfo. Forgot which one applies to .cmas. > I had to install flexlink for ocaml to get the dll linking to work on > windows. Can't help you here. > Kind regards > Rouan. All the best, -- Guillaume Yziquel http://yziquel.homelinux.org/