Browse thread
exception not registered.Abandon
[
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: | 2010-03-13 (19:29) |
From: | Florent Monnier <monnier.florent@g...> |
Subject: | Re: [Caml-list] exception not registered.Abandon |
Le samedi 13 mars 2010 19:55:37, vous avez écrit : > On Sat, Mar 13, 2010 at 07:36:16PM +0100, Florent Monnier wrote: > > > > I have compiled a program using the native compiler, then when I run > > > > the executable I get this error message: > > > > > > > > exception not registered.Abandon > > > > > > > > Searching Google I don't find anything about this error message. > > > > How should I interpret it? > > > > > > Is the program linked to C code (apart from stdlib, I mean)? > > > > Yes it is. > > It's linked with OpenGL (only the GL lib, no GLU or anything esle) and > > SDL (through ocaml-sdl) > > > > It's a program that I try to switch the windowing part from Glut to SDL. > > With Glut it works alright. > > > > Also I've just seen that running in the interpreted mode instead of > > native code the program does run without any problem. > > > > Do these additional informations give you any clue? > > As Adrian said, it's from ocaml-SDL. It's from one of several > functions which look like this: > > static void > sdlloader_raise_exception (char *msg) > { > static value *loader_exn = NULL; > if(! loader_exn){ > loader_exn = caml_named_value("SDLloader_exception"); > if(! loader_exn) { > fprintf(stderr, "exception not registered."); > abort(); > } > } > raise_with_string(*loader_exn, msg); > } > > Essentially you have to register OCaml exceptions before you can call > them from C, so it sounds like you're not calling some sort of SDL > "init" function (or calling it too late in your program). Or possibly > there is a bug in the ocaml-SDL bindings. In the source of the sdlvideo.ml module there is: exception Video_exn of string let _ = Callback.register_exception "SDLvideo2_exception" (Video_exn "") it seems for some reason that this code is not executed, because if I add at the beginning of my program (not in sdl source): let () = (* notice the exception is prefixed with the name of the sdl module *) Callback.register_exception "SDLvideo2_exception" (Sdlvideo.Video_exn ""); ;; then I get the correct exception. I don't understand what the bug is.