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 > 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. > >