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/libml.so (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/libml.so 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 -L{PETSC_LIB_DIR} -lpetsc* ${PETSC_EXTERNAL_LIB_BASIC} 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 resolved. Jed [*] I find PETSc link lines to be slightly deceptive. They often look like -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: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20091029/a899b7e8/attachment.pgp>