[
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: | -- (:) |
| From: | Alain Frisch <alain@f...> |
| Subject: | Re: [Caml-list] Dynamic libs w/ Ocaml + C code under Mac OS X |
Hi, Joel Stanley wrote: > The short question is: can I currently generate a shared library > containing natively-compiled ocaml code together with arbitrary C code > under Mac OS X? I'll reply assuming you want to build a plugin that can be loaded with Dynlink, not a stand-alone shared library that includes the OCaml runtime. Otherwise let me know. > To wit, should I be doing something other than: > > $ gcc -c wrapper.c > $ ocamlopt -dlcode -c simple.ml > ... > $ ocamlopt -shared -o test simple.cmx wrapper.o > > or perhaps just ocamlopt -shared -o test simple.ml wrapper.c? Both should work under Mac OS X < 10.5 on Intel. PowerPC versions are not supported and for 10.5, there are some issues (see below). What are your OS version and cpu? > The immediate problem is that this seems to be passing the wrong > arguments to ld: > > + ld -bundle -flat_namespace -undefined suppress -read_only_relocs > suppress -o 'test' -I'/Users/jstanley/hbin/lib/ocaml' > '-L/Users/jstanley/hbin/lib/ocaml' 'test.startup.o' 'simple.o' 'wrapper.o' > > (I'd expect to see gcc -dynamiclib (instead of bundle) here if Mac OS X > is supported, and without the -I switch). I'm not very familiar with the linker of Mac OS X. In particular, I don't really know the differences between bundles and shared libraries. OCaml used to produce bundles (not shared libs) for stub libraries (dll*.so), and I think I just decided to use the same approach. What's wrong with the above linker invocation? Do the errors you mention appear with it, or only if you change the command-line to "gcc -dynamiclib ..."? > which lead me to believe that simple.o is not correctly being generated > with position independence. Indeed. The code generators don't produce PIC code. The Mac OS X linker is supposed to be able to build bundle with position-dependent code, using the -read_only_relocs suppress flag. This flag has been removed from the new linker in Leopard. Apple provides a ld_classic with the old behavior, but unfortunately, some libraries (like X11) seems to require the new linker. I think we have no good solution for Mac OS X 10.5 on Intel currently. Any help is welcome, of course. -- Alain