From: Igor Pechtchanski <pechtcha@cs.nyu.edu>
To: matthieu.dubuget@libertysurf.fr
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] DLL (windows) creation problem
Date: Thu, 23 Sep 2004 12:57:26 -0400 (EDT) [thread overview]
Message-ID: <Pine.GSO.4.61.0409231248470.12402@slinky.cs.nyu.edu> (raw)
In-Reply-To: <I4I6HC$DB359D3AA16823FCDBDF7D8AD4F604F1@tiscali.fr>
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
next prev parent reply other threads:[~2004-09-23 16:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-23 16:44 matthieu.dubuget
2004-09-23 16:57 ` Igor Pechtchanski [this message]
2004-09-23 19:08 ` Matthieu Dubuget
2004-09-23 20:25 ` Igor Pechtchanski
2004-09-24 7:27 matthieu.dubuget
2004-09-24 15:21 ` Igor Pechtchanski
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=Pine.GSO.4.61.0409231248470.12402@slinky.cs.nyu.edu \
--to=pechtcha@cs.nyu.edu \
--cc=caml-list@inria.fr \
--cc=matthieu.dubuget@libertysurf.fr \
/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