Hmmm... I changed BUILD_SHARED_LIBS to ON in CMakeLists.txt, removed objdir, reran cmake, and rebuilt. I'm not convinced it actually changed anything! core.so is still huge and I only saw libpcm.a and not libpcm.so as I was expecting (if I've understood the option correctly!).
It still failed because crc32 was undefined.
by appending "-lz" fixed it! I've not run a full "make test" but ctest within tests/pcmsolver and a few selected at random worked fine with this version including PCMSolver.
Checking link.txt on the other system (where it builds fine with PCMSolver), there is no "-lz" so it must be pulling in zlib implicitly somehow.
Building with PCMSolver:
System 1 (gcc 6.3.0; binutils 2.27: builds and runs fine:
"ldd core.so" output has no mention of libz.so but strace shows that libz.so is loaded at runtime!
System 2 (gcc 4.9.4; binutils 2.25.1): builds fine but fails to run with undefined crc32:
"ldd core.so" output has no mention of libz.so
System 2 with "-lz" added to link.txt: builds and runs fine:
"ldd core.so" output has libz.so
I.e., with the newer compiler and binutils (System 1), zlib seems to be pulled in implicitly at runtime; with the older compiler and binutils (System 2), zlib needs to be explicitly linked into core.so.
It looks like I've got it running happily on both systems not but it might be handy to work out why this has happened in case it breaks on other systems.