From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA20357; Tue, 8 Jul 2003 16:11:08 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA05621 for ; Tue, 8 Jul 2003 16:11:07 +0200 (MET DST) Received: from nef.ens.fr (nef.ens.fr [129.199.96.32]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h68EB6f09142 for ; Tue, 8 Jul 2003 16:11:06 +0200 (MET DST) Received: from fistandantilus.takhisis.org (dhcp179.dmi.ens.fr [129.199.97.179]) by nef.ens.fr (8.12.9/1.01.28121999) with ESMTP id h68EB6ko055097 for ; Tue, 8 Jul 2003 16:11:06 +0200 (CEST) Received: by fistandantilus.takhisis.org (Postfix, from userid 3148) id 3C8F4274086; Tue, 8 Jul 2003 16:11:06 +0200 (CEST) Date: Tue, 8 Jul 2003 16:11:06 +0200 From: Stefano Zacchiroli To: Inria Ocaml Mailing List Subject: [Caml-list] [long] not-so-static binaries on Mac OS X Message-ID: <20030708141106.GA6500@fistandantilus.takhisis.org> Mail-Followup-To: Inria Ocaml Mailing List Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.4i X-Loop: caml-list@inria.fr X-Spam: no; 0.00; bononia:01 binaries:01 fink:01 sourceforge:01 naively:01 dynamically:01 dependencies:01 passing:01 -static:01 statically:01 usr:01 dylib:01 ocamlopt:01 -verbose:01 gcc:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I'm working on the Mac OS X porting of an OCaml (native code) application. I had no problem in making the application compile and run on Mac OS X using additionally packages from the fink (http://fink.sourceforge.net) project (like ocaml itself) and some other hand installed ocaml libraries. I only encountered problems while trying to distribute the resulting binaries. Naively compile in native code results, as usual, in a dynamically linked executable. Unfortunately most of those dependencies are easily resolvable only using some fink packages, but I don't want to force the final user of the application to install fink: is huge and I think is a bit against the standard installation easyness of Mac OS X. So I tried to compile passing "-static" to the C linker. This doesn't work and his highly discouraged by Apple that additionally states that "static linking of users binaries is not supported on Mac OS X" (http://developer.apple.com/qa/qa2001/qa1118.html). My next aim was therefore to statically link only certain libraries (in my case all the ocaml related libraries) and dinamically link only against the Mac OS X library: "/usr/lib/libSystem.B.dylib". This turns out to be far from easy, the only working solution I've found so far is as follow: - execute the final ocamlopt linking run passing "-verbose" (this shows you the execution of an assembly pass on a /tmp/ generating a /tmp/ object and an execution of gcc linking all the objects including the .o in /tmp - hit CTRL-C (!!!!) just after the .o in /tmp has been created (to avoid that it will be deleted [no, "-S" doesn't help here]) - manually execute the final gcc linking command replacing each undesired "-l" switch with the corresponding .a library The result turns out to dynamically depends only on the desired system libraries. Ok, but this seems to me a bit tricky ... is not funny to do that for all the needed executables and for each new release of the application :-) The problem is that there is no way to tell ocamlopt to _remove_ a linker switch while invoking the linker. You can just _add_ switches (with "-cclib"), but if the linker find both a "-l" switch and a static ".a" library it prefers the dynamic linking. I've looked at the native code compiler code and is possible to selectively remove some "-l" switches, but it's a bit tricky because those switches could come from different "sources". I can try to add a -rmccopt/-rmcclib switch to ocamlopt but before doing that I would like to be sure that: 1) there is no other way to do what I'm trying to do 2) such a patch is welcome upstream TIA, Cheers. -- Stefano Zacchiroli -- Master in Computer Science @ Uni. Bologna, Italy zack@{cs.unibo.it,debian.org,bononia.it} - http://www.bononia.it/zack/ " I know you believe you understood what you think I said, but I am not sure you realize that what you heard is not what I meant! " -- G.Romney ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners