Dear Edwin,

Le 26/04/12 10:33, Török Edwin a écrit :
Here's the way I'm compiling everything. It builds a libhello_world.a static 
library from ml_code.obj.o and c_code.o.
ocamlc -c ml_code.mli
ocamlopt -c ml_code.ml
ocamlopt -output-obj ml_code.cmx -o ml_code.obj.o
gcc -c c_code.c -I"`ocamlc -where`"
ar rcs libhello_world.a ml_code.obj.o c_code.o
gcc -o test -L. -L"`ocamlc -where`" test.c -lhello_world -lasmrun -lm -ldl

You need -Wl,--whole-archive -Wl,--no-whole-archive around the link of your .a, 
like this:
gcc -o test -L. -L"`ocamlc -where`" test.c -Wl,--whole-archive -lhello_world 
-Wl,--no-whole-archive -lasmrun -lm -ldl
Thanks a lot, it works now!

Otherwise the functions from your .a are dropped because nothing else before it 
needs it (-lasmrun would, but its after your .a).
What do you mean exactly? I imagine that test.o needs some functions of the libhello_world.a. But I don't see why libasmrun would need some other functions of libhello_world...

What about the following alternative where libasmrun is directly appended to the .a file?
cp "`ocamlc -where`"/libasmrun.a libhello_world.a
ar rcs libhello_world.a ml_code.obj.o c_code.o
gcc -o test -L. -L"`ocamlc -where`" test.c -lhello_world -lm -ldl

Best regards.
Xavier

--
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

Reply via email to