The ability to link static libraries into a shared library -- e.g.
gcc -shared -o libstuff.so lib1.a lib2.a lib3.a
-- disappeared in one of the 3.x series. This broke my tendency to build applications as static libraries, linked into a shared library, linked to by an executable consisting of little more than a main().
Turns out all that was missing was a GNU ld flag to prevent ld from optimizing the unused object code out of the shared library.
The solution is to wrap the .a files in --whole-archive flags, e.g.
gcc -shared -o libstuff.so -Wl,--whole-archive lib1.a lib2.a lib3.a -Wl,--no-whole-archive