Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Guillaume Yziquel <guillaume.yziquel@citycable.ch>
To: rouanvd@softwarerealisations.com
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] problem creating .cma library
Date: Thu, 31 Dec 2009 00:30:16 +0100	[thread overview]
Message-ID: <4B3BE288.4030701@citycable.ch> (raw)
In-Reply-To: <56670.41.177.16.252.1262195331.squirrel@41.177.16.252>

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/


  reply	other threads:[~2009-12-30 23:30 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-30 17:48 rouanvd
2009-12-30 23:30 ` Guillaume Yziquel [this message]
2010-01-05 13:04   ` [Caml-list] " Damien Doligez
2010-01-08 23:38     ` Guillaume Yziquel
2010-01-08 23:54       ` Basile STARYNKEVITCH
2010-01-09  0:11         ` Guillaume Yziquel
2010-01-09  7:58           ` David Allsopp
2010-01-09 11:33             ` Guillaume Yziquel
2010-01-09 12:52               ` Richard Jones
2010-01-09 14:00                 ` Daniel Bünzli
2010-01-09 14:02                   ` Daniel Bünzli
2010-01-09 14:21                     ` Joel Reymont
2010-01-09 19:36                   ` Guillaume Yziquel
2010-01-10  2:11                     ` Daniel Bünzli
2010-01-11 17:14                       ` Guillaume Yziquel
2010-01-10 13:31                     ` ygrek
2010-01-11 18:01                       ` Guillaume Yziquel
2010-01-09 19:29                 ` Guillaume Yziquel
2010-01-11 12:18                   ` Gerd Stolpmann
2010-01-11 17:11                     ` Guillaume Yziquel
2010-01-20 14:42                   ` Damien Doligez

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B3BE288.4030701@citycable.ch \
    --to=guillaume.yziquel@citycable.ch \
    --cc=caml-list@yquem.inria.fr \
    --cc=rouanvd@softwarerealisations.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox