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: matthieu.dubuget@libertysurf.fr <matthieu.dubuget@l...>
Subject: [Caml-list] DLL_(windows)_creation_problem
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

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


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


************************ ADSL ILLIMITE TISCALI + TELEPHONE GRATUIT ************************ 
Surfez 40 fois plus vite pour 30EUR/mois seulement !  Et téléphonez partout en France gratuitement,  
vers les postes fixes (hors numéros spéciaux). Tarifs très avantageux vers les mobiles et l'international !
Pour profiter de cette offre exceptionnelle, cliquez ici : http://register.tiscali.fr/adsl  (voir conditions sur le site)


-------------------
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