ML symbols in

Jed Brown jed at
Thu Oct 29 13:45:11 CDT 2009

Jed Brown wrote:
> Jed Brown wrote:
>> Satish Balay wrote:
>>> I don't see any changes in the 'shared' target for linux [in conf/rules]
>>> And I just did a build with current petsc-dev - and see a bunch of ML_ symbols
>> Thanks Satish.  Wiping externalpackages and PETSC_ARCH was enough.
> I spoke too soon.

Okay, my problem was that a completely different package (OpenCV, a
dependency for something else) installed a libml in /usr/lib, the timing
was just coincidental.  Since I keep some libraries in /usr (like
parmetis and hdf5), -L/usr/lib came before -L${PETSC_LIB_DIR} in
PACKAGES_LIBS, therefore the wrong libml was linked in shared_linux.
OTOH, the correct one was linked for the examples because
-L${PETSC_LIB_DIR} was prepended to the link line.  The complete story
follows, in case someone else runs into this issue.

So I had

/usr/lib/ (opencv)
$PETSC_DIR/$PETSC_ARCH/lib/libml.a ($PETSC_LIB_DIR/libml.a)

The link for shared_arch is effectively

  -L/usr/lib -L${PETSC_LIB_DIR} -lml

which brings in /usr/lib/ which doesn't resolve anything, but
the linker doesn't complain about unresolved symbols because it was
building a shared library.  Now we might expect an example to actually
fail over this, but that is linked with


so this time it is resolved to the correct $PETSC_LIB_DIR/libml.a.

I realize that the real problem here was OpenCV's libml and the fact
that linkers don't resolve symbols by starting with the most recent -L
path [*], but we should at least remember that putting -L{PETSC_LIB_DIR}
at the beginning of the line can completely change the way symbols are


[*] I find PETSc link lines to be slightly deceptive.  They often look

  -L/A -rpath=/A -lA -L/B -rpath=/B -lB

with the implication that it would resolve to /A/libA.a /B/libB.a, but
the linker will find /A/libB.a if it exists.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 261 bytes
Desc: OpenPGP digital signature
URL: <>

More information about the petsc-dev mailing list