Version française
Home     About     Download     Resources     Contact us    
Browse thread
Dynlink and ocamlfind for camlp4 3.11?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Gerd Stolpmann <gerd@g...>
Subject: Re: [Caml-list] Dynlink and ocamlfind for camlp4 3.11?

Am Sonntag, den 04.10.2009, 20:53 +0100 schrieb Conglun Yao:
> 
>         
>         
>         
>         In that case, try listing dynlink explicitly, like:
>         
>          ocamlfind ocamlc dynlink.cma -package json-static [etc]
> 
> $ ocamlfind ocamlc dynlink.cma -package json-static -syntax camlp4o -c
> test.ml
> 
> $ ocamlfind ocamlc -I /home/conglun/godi/lib/ocaml/pkg-lib/camlp4
> dynlink.cma -package json-static -syntax camlp4o -c t.ml
> 
> 
> Error: Error while
> linking /home/conglun/godi/lib/ocaml/std-lib/camlp4/camlp4lib.cma(Camlp4):
> Reference to undefined global `Dynlink'
>  
> 
>         
>         Anyhow, it sounds like a bug in the META files that are
>         supplied with
>         your cygwin OCaml distribution.
>         
>         
>         
> 
> I think you are right, the problem happens on the camlp4o or cygwin,
> which can't load dynlink.  But I can't find problem in the camlp4's
> META  (in the attachment)

While cygwin cannot load shared libraries from bytecode, it still can
load pure bytecode dynamically. It is reasonable that there is a
dynlink.cma for this case, and that camlp4lib.cma depends on it.

findlib has a special mode for platforms that cannot load shared
libraries dynamically. This mode seems to be broken  - it calls a script
safe_camlp4 instead of camlp4, and safe_camlp4 produces ad hoc a new
camlp4-type executable that includes the required C libraries - without
that trick you couldn't use json-static at all on these platforms:

https://godirepo.camlcity.org/svn/lib-findlib/trunk/tools/safe_camlp4

The question is now whether the error is in this script (does it have to
add dynlink.cma anyway?) or whether mkcamlp4 is broken.

Can you try to change safe_camlp4 so the line

mkcamlp4 -o $tmp_camlp4 $cp4_mods || exit

reads

mkcamlp4 -o $tmp_camlp4 dynlink.cma $cp4_mods || exit

? (I don't have a cygwin ocaml at hand.) safe_camlp4 should be in the
bin/ directory.

Gerd
-- 
------------------------------------------------------------
Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
Phone: +49-6151-153855                  Fax: +49-6151-997714
------------------------------------------------------------