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