From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 43A52BC6C for ; Tue, 5 Feb 2008 05:57:58 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAB98p0fUGyodimdsb2JhbACQNAEBAQgEBgcKCAkHm3s X-IronPort-AV: E=Sophos;i="4.25,304,1199660400"; d="scan'208";a="8748172" Received: from smtp3-g19.free.fr ([212.27.42.29]) by mail3-smtp-sop.national.inria.fr with ESMTP; 05 Feb 2008 05:57:53 +0100 Received: from smtp3-g19.free.fr (localhost.localdomain [127.0.0.1]) by smtp3-g19.free.fr (Postfix) with ESMTP id 08D4B17B545; Tue, 5 Feb 2008 05:57:53 +0100 (CET) Received: from [192.168.0.3] (rke75-3-82-229-183-156.fbx.proxad.net [82.229.183.156]) by smtp3-g19.free.fr (Postfix) with ESMTP id CC78D17B537; Tue, 5 Feb 2008 05:57:52 +0100 (CET) Message-ID: <47A7EB9E.3050808@frisch.fr> Date: Tue, 05 Feb 2008 05:52:46 +0100 From: Alain Frisch User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: Joel Stanley Cc: caml-list@yquem.inria.fr Subject: Re: [Caml-list] Dynamic libs w/ Ocaml + C code under Mac OS X References: <11970BA6-EC2F-47FD-A194-BFD204057F06@galois.com> In-Reply-To: <11970BA6-EC2F-47FD-A194-BFD204057F06@galois.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; frisch:01 frisch:01 libs:01 ocaml:01 ocaml:01 dynlink:01 runtime:01 gcc:01 ocamlopt:01 ocamlopt:01 -shared:01 cmx:01 -shared:01 powerpc:01 'test':01 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