Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] DLL_(windows)_creation_problem
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Igor Pechtchanski <pechtcha@c...>
Subject: Re: [Caml-list] DLL_(windows)_creation_problem
On Thu, 23 Sep 2004, matthieu.dubuget wrote:

> Hello camlers!
>
> I experience a strange problem with the following on windows 98.
>
> I have the following files:
>
> =============== dac.ml ===========================
> let affiche dac =
>   Printf.printf "%d\n" dac
> ==================================================
>
> =========== ms_dac.h =============================
> void ms_dac_init ();
> int ms_dac_init_ok (void);
> ==================================================
>
> =========== ms_dac.c =============================
> #include "ms_dac.h"
> #include <caml/callback.h>
>
> static int ms_dac_init_done = 0;
>
> void ms_dac_init (){
>   char *vide = 0l;
>   if (!ms_dac_init_done){
>     caml_startup (&vide);
>     ms_dac_init_done = 1;
>   }
> }
> int ms_dac_init_ok (void){
>   return ms_dac_init_done;
> }
> ==================================================
>
> =========== ms_dac.def ===========================
> EXPORTS
> ms_dac_init
> ms_dac_init_ok
> ==================================================
>
> ========== t.c ===================================
> #include <stdio.h>
> #include "ms_dac.h"
>
> int main (){
>   int ok;
>   ok = ms_dac_init_ok();
>   printf ("%d\n",ok);
>   fflush(stdout);
>   ms_dac_init();
>   ok = ms_dac_init_ok();
>   printf ("%d\n",ok);
>   fflush(stdout);
>   return 0;
> }
> ==================================================
>
> C:\test>ocamlc -v
> ocamlc -v
> The Objective Caml compiler, version 3.08.0
> Standard library directory: c:\ocaml\lib
>
> C:\test>ocamlopt -output-obj -o dacl.obj dac.ml
>
> ocamlopt -output-obj -o dacl.obj dac.ml
>
> C:\test>ocamlopt -c ms_dac.c
>
> ocamlopt -c ms_dac.c
> ms_dac.c
>
> C:\test>link -nologo -dll -out:ms_dac.dll -def:ms_dac.def
> dacl.obj ms_dac.obj -libpath:c:\ocaml\lib libasmrun.lib
> link -nologo -dll -out:ms_dac.dll -def:ms_dac.def dacl.obj
> ms_dac.obj -libpath:c:\ocaml\lib libasmrun.lib
>    Creating library ms_dac.lib and object ms_dac.exp
>
> C:\test>cl -o t.exe -nologo -Ox -MT ms_dac.lib t.c
> cl -o t.exe -nologo -Ox -MT ms_dac.lib t.c
> t.c
>
> C:\test>t.exe
> t.exe
> 0
> <-------------------   At this step I get an error from Windows

The dependent DLL should be in the PATH (instead of LD_LIBRARY_PATH).
Windows should tell you which DLL is missing (I suspect it's the one that
contains the Printf module).

> If I modify the function definition (that uses Printf.printf) in
> the ml file, their is no more error.
>
> let affiche dac =
> print_int dac

That's no surprise -- "print_int" is built into the ocaml binary, so your
DLL is not dependent on other DLLs anymore.

> I suspect a conflict, or a missing library, but I can't find out what is
> going on exactly.
>
> On linux, this gives the following with the original files:
>
> $ ocamlc -v
> The Objective Caml compiler, version 3.08.1
> Standard library directory: /usr/lib/ocaml/3.08
> $ ocamlopt -output-obj -o dac1.o dac.ml
> $ ocamlopt -c ms_dac.c
> $ gcc -shared -o libdac.so dac1.o ms_dac.o
> -L/usr/lib/ocaml/3.08 -lasmrun
> $ gcc -o t libdac.so t.c -lm -ldl
> $ LD_LIBRARY_PATH=. ./t
> 0
> 1
> $
>
> Thanks in advance
> Matthieu Dubuget

FWIW, I've just posted a Cygwin ocaml package version that supports
dynamic linking and should let you use the above Linux transcript almost
verbatim (only tested on WinXP for now, see
<http://cygwin.com/ml/cygwin-apps/2004-09/msg00195.html>).  It's not on
the mirrors yet, but feel free to test it out, and, if you do, please
report the results to me or the Cygwin list (<cygwin at cygwin dot com>).

Igor Pechtchanski
Volunteer O'Caml maintainer for Cygwin.
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Happiness lies in being privileged to work hard for long hours in doing
whatever you think is worth doing."  -- Dr. Jubal Harshaw

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners