From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id q28EGNnS022844 for ; Thu, 8 Mar 2012 15:16:23 +0100 X-IronPort-AV: E=Sophos;i="4.73,552,1325458800"; d="scan'208";a="148253045" Received: from top-wifi.irisa.fr ([131.254.66.192]) by mail1-relais-roc.national.inria.fr with ESMTP/TLS/AES128-SHA; 08 Mar 2012 15:16:18 +0100 Content-Type: text/plain; charset=iso-8859-1 Mime-Version: 1.0 (Apple Message framework v1257) From: Alan Schmitt In-Reply-To: Date: Thu, 8 Mar 2012 15:16:18 +0100 Message-Id: References: <74F89B4A-9C34-4A33-8DAA-8A12CF9EF03B@polytechnique.org> To: caml-list list X-Mailer: Apple Mail (2.1257) Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by walapai.inria.fr id q28EGNnS022844 Subject: Re: [Caml-list] state of native dynlink on os x On 8 mars 2012, at 12:13, Alan Schmitt wrote: > On 27 févr. 2012, at 16:43, Damien Doligez wrote: > >>> Also, when running why3, I get some undefined symbols (_camlRandom, _camlParsing, _camlString). Where are these symbols defined? >> >> Looks like modules of the standard library, right ? > > Regarding this, should something special be done when dynlinking a file that depends on the standard library? I assume that dependencies are not automatically loaded, but should one load the standard library first? > > In other words, is this a bug in why3, or in ocaml? Trying to get to the bottom of this, here is what I've done. - Adapting the minimal example from http://caml.inria.fr/mantis/view.php?id=5093 I checked that I can load a plugin that uses a function from Random. - I then tried to load a why3 plugin. It fails because it cannot find some symbol (_camlWhy3), and I could not find how to compile things to make sure why3.cmxa is linked with the plugin. - Getting back to the basics, I tried to create a small archive of my own, which I would use in a plugin, and this is where I'm stuck. I have the following files: test.ml: let f () = "foo" plugin.ml: let s = Test.f () let () = print_endline s loader.ml: let load f = try Dynlink.loadfile f with Dynlink.Error e -> print_endline (Dynlink.error_message e) let () = load "plugin.cmxs" to build everything, I do (I tried adding test.cmxa everywhere, to no avail. Everything lives in the same, current directory): ocamlopt.opt -a -o test.cmxa test.ml ocamlopt.opt -c -linkall -o plugin.cmx test.cmxa plugin.ml ocamlopt.opt -shared plugin.cmx test.cmxa -o plugin.cmxs ocamlopt.opt test.cmxa dynlink.cmxa loader.ml -o loader.native When I run "./loader.native", I get: no implementation available for Test I googled this error and could only find references to problem related to the (deprecated) Dynlink.add_interfaces, which is not even supposed to work natively. What am I doing wrong? Thanks, Alan