Browse thread
[Caml-list] mixing dynlink & toplevel...
-
Jonathan Roewen
-
Jonathan Roewen
- Jonathan Roewen
-
Jonathan Roewen
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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 >