Answering to myself: the information needed by findlib to sort the cma correctly is stored in the META file, using "require" directives. I

In fact I have a slightly more complicated structure:
- library A
- library B.B1 which depends on A
- library B.B2 which depends on B.B1 and A
- executable C which depends on all others

and I had forgotten the dependency between B.B1 and A. The error message was mentionning B.B2 instead so I overlooked the real missing part. Sorry for the noise!

Cheers,
  Philippe.

2012/12/19 Philippe Veber <philippe.veber@gmail.com>
Dear all,

I have 2 libraries, say A and B where B depends on A, and an executable C which uses both A and B. Each of these components is a separate (oasis) project. I have some test executables in B which work fine. However, when I compile C, the compiler complains that it has no implementation for a module defined in A and used in B. The compilation (linking) command of C contains "-package" options for A and B, it is of the form:

ocamlfind ocamlopt ... -package B -package A ... C.cmo

If I permute the two package options, like in

ocamlfind ocamlopt ... -package A -package B ... C.cmo

the compilation works fine. It is not really clear to me, but I thought the order of the -package options did not matter, because findlib would store the dependencies between packages and produce a compilation command where cma or cmxa are correctly sorted. Indeed, if I use the -verbose option, I can see that cma are wrongly sorted in the former case, while they are fine in the latter.

Admitedly my description is rather abstract, but does anyone see what could I (or oasis) have forgotten, to tell ocamlfind that B.cma depends on A.cma?

Cheers,
  Philippe.