In Mac Lion, i get :

$ ocamlopt.opt -shared plugin.cmx test.cmxa -o plugin.cmxs
ld: warning: -read_only_relocs cannot be used with x86_64
$ ocamlopt.opt test.cmxa dynlink.cmxa loader.ml -o loader.native
File "loader.ml", line 1, characters 0-1:
Error: Cannot find file dynlink.cmxa

2012/3/8 Alan Schmitt <alan.schmitt@polytechnique.org>
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



--
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs




--
---------------------
https://twitter.com/#!/ontologiae/
http://linuxfr.org/users/montaigne