Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] mixing dynlink & toplevel...
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jonathan Roewen <jonathan.roewen@g...>
Subject: Re: [Caml-list] mixing dynlink & toplevel...
Well, I've solved my own problem. Mind you, I am known for doing
things that are not expected/thought of...

Turns out it was a double initialisation problem as dynlink &
toplevellib share some modules.

On 8/28/06, Jonathan Roewen <jonathan.roewen@gmail.com> wrote:
> > Hi,
> >
> > I dunno if this is possible, but: if I use Dynlink, can I later load
> > toplevellib.cma, and use it like normal? At the moment I get undefined
> > reference to global 'Toploop'.
> >
> > Jonathan
>
> I've just made a small test case to demonstate:
>
> test.ml:
> open Dynlink
>
> let () = try
>  print_endline "init";
>  Dynlink.init ();
>  print_endline "allowing unsafe modules";
>  Dynlink.allow_unsafe_modules true;
>  print_endline "loading toplevellib.cma";
>  Dynlink.loadfile "/usr/local/lib/ocaml/toplevellib.cma";
>  print_endline "loading topstart.cmo";
>  Dynlink.loadfile "/usr/local/lib/ocaml/topstart.cmo";
>  (* now the ocaml toplevel should be running *)
> with Dynlink.Error error -> print_endline (Dynlink.error_message error);;
>
> To compile: ocamlc -o test -linkall dynlink.cma test.ml
>
> Running:
> colinux:~/test# ./test
> init
> allowing unsafe modules
> loading toplevellib.cma
> loading topstart.cmo (shouldn't return)
>        Objective Caml version 3.09.2
>
> # let s = "hello world";;
> Reference to undefined global `Toploop'
> # exit 0;;
> colinu:~/test#
>
> As you can see, it can run functions fine (e.g. calling
> Pervasives.exit), but let bindings fail.
>
> I know that a module loaded via Dynlink.loadfile can call functions
> defined by other modules loaded by Dynlink.loadfile before it (I
> actually do this), so why can't the toplevel access these? It can only
> access those of the original program from my testing.
>
> Jonathan
>