On Sep 14, 2011, at 17:56 , Romain Bardou wrote: > Le 14/09/2011 17:09, Benedikt Meurer a écrit : >> >>> My first problem is: I tried something similar for native code (using >>> ocamlopt instead of ocamlc, .cmx instead of .cmo and .cmxa instead of .cma) >>> but ocamlmklib fails with the following error: >>> /usr/bin/ld: wrapper.o: relocation R_X86_64_32 against `.rodata' can >>> not be used when making a shared object; recompile with -fPIC >>> wrapper.o: could not read symbols: Bad value >>> collect2: ld returned 1 exit status >>> I have absolutely no idea what this means, I'm really confused here and >>> Google does not help. >> >> The error messages already includes the answer, you need to pass -fPIC to >> the C compiler when compiling wrapper.c, i.e. >> >> $ gcc -c -fPIC -o wrapper.o wrapper.c > > Thanks for your quick answer. > > Actually I tried adding the -fPIC option like this: > > ocamlopt -c -ccopt -fPIC wrapper.c > ocamlopt -c mylib.ml > ocamlmklib wrapper.o mylib.cmx -o mylib > ocamlopt -c main.ml > ocamlopt dynlink.cmxa main.cmx -o main > CAML_LD_LIBRARY_PATH=. ./main mylib.cmxa > > But when Dynlink.load is called, it fails with the following error: > > error loading shared library: /home/.../mylib.cmxa: invalid ELF header > > I'm thinking this is because the .cmxa has not been compiled with the -shared > option, but I don't know how to tell ocamlmklib to compile with the -shared > option.
$ ocamlmklib -ldopt -shared wrapper.o mylib.cmx -o mylib > Romain Bardou Benedikt -- 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
