caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Xavier Leroy <xavier.leroy@inria.fr>
To: Sven Luther <luther@dpt-info.u-strasbg.fr>
Cc: Yang Shouxun <yangsx@fltrp.com>, caml-list@inria.fr
Subject: Re: [Caml-list] on the -pack option
Date: Tue, 22 Oct 2002 19:14:24 +0200	[thread overview]
Message-ID: <20021022191424.B28301@pauillac.inria.fr> (raw)
In-Reply-To: <20021022092103.GA1344@iliana>; from luther@dpt-info.u-strasbg.fr on Tue, Oct 22, 2002 at 11:21:04AM +0200

> Is there a particular reason why ocamlmklib does not support the pack
> option ?

Well, basically because I think it wouldn't make much sense.
The job of ocamlmklib is to build a mixed C/Caml library, that is:
- a ".cma" Caml library
- a ".a" and/or ".so" C library
- the necessary annotations in the ".cma" so that the C part is
  automatically linked.

I feel that packing a set of Caml object files (.cmo) into
substructures of a single Caml object file (which is what -pack does)
is best done by a separate invocation of ocamlc -pack.  That is,
you can always do
        ocamlc -pack -o mylib.cmo a.cmo b.cmo c.cmo
        ocamlmklib -o mylib ... mylib.cmo

> Also, i have the feeling that the correct way of distributing a bunch of
> .cmo is to create a .cma, not to cram them together in a super .cmo
> thanks to the pack option, i may be wrong about this though.
> 
> The current documentation only gives an example of using the -pack
> option to build .cmos, not to build a .cma. Maybe such an example could
> be added, or at least a little notice about it ?

I agre with Chris' reply.  Maybe the docs should be clearer about
this, but basically a .cma is a set of .cmo, while -pack builds a
single .cmo from other .cmo.  Nothing prevents you from packing cmo's
into lib.cmo (ocamlc -pack -o lib.cmo ...), then building
lib.cma containing only lib.cmo (ocamlc -a -o lib.cma lib.cmo).
That might be useful if your lib also needs C code, as shown above.

> [about not linking unused code]
> BTW, if you pack the .cmos into a single .cmo and then put this one in a
> .cma, you should get the same benefit as what you describe, isn't it ?

Unfortunately not.  The .cma contains only one .cmo, which is either
not linked at all or linked in full.  For the bytecode compiler, it
could be possible to eliminate unused code with a finer grain.  But
for the native-code, we are severely constrained by what the Unix and
Win32 linkers know how to do, and they can only eliminate whole object
files, not parts of them.

For some libraries, this isn't really a problem: by design, you'll
generally use most of their modules.  For other libraries (e.g. Baire :-)
it's more problematic.  There is a delicate trade-off here between
selective linking and avoiding compilation unit namespace pollution.
I can't say I'm completely happy about this, but I'm afraid this is
the best we can do with the limited abilities of today's linkers.

> BTW, advi build fails on ia64

Yes, your bug report is in the database and will be addressed in due time.

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


  parent reply	other threads:[~2002-10-22 17:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-22  5:33 [Caml-list] Error during partial linking Yang Shouxun
2002-10-22  8:42 ` Xavier Leroy
2002-10-22  9:21   ` Sven Luther
2002-10-22 16:17     ` Chris Hecker
2002-10-22 16:47       ` Sven Luther
2002-10-22 17:14     ` Xavier Leroy [this message]
2002-10-22 19:30       ` [Caml-list] on the -pack option Sven Luther
2002-10-22  9:37   ` [Caml-list] Error during partial linking Yang Shouxun
2002-10-22 16:07     ` Chris Hecker
2002-10-22 17:00       ` Xavier Leroy
2002-10-22 17:12         ` Chris Hecker
2002-10-22 17:21         ` brogoff
2002-10-22 20:06           ` Dmitry Bely
2002-10-22 20:25             ` Alain Frisch
2002-10-22 20:37               ` Dmitry Bely
2002-10-22 20:53                 ` Alain Frisch
2002-10-22 21:10                   ` Dmitry Bely
2002-10-23  7:15                 ` Alessandro Baretta
     [not found]         ` <Pine.LNX.4.44.0210221008100.6093-100000@grace.speakeasy.ne t>
2002-10-22 17:44           ` Chris Hecker
2002-10-22 19:31         ` Sven Luther
2002-10-22 23:38           ` Chris Hecker
2002-10-23  4:16             ` David Brown
2002-10-23 10:01           ` Diego Olivier Fernandez Pons
2002-10-23 10:36             ` Sven Luther
2002-10-23 11:41               ` Alessandro Baretta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20021022191424.B28301@pauillac.inria.fr \
    --to=xavier.leroy@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=luther@dpt-info.u-strasbg.fr \
    --cc=yangsx@fltrp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).