shared versions should not need to add -lm unless the program uses libm
itself. Strictly speaking, libg++ depends on libstdc++, but libstdc++
has dynamic dependencies on some exception tables and binutils doesn't
seem to like it when a secondary library has undefined references. It
doesn't seem to care when -lstdc++ is added on the command line to ld
though. Anyway, the c++ driver adds -lstdc++ explicitly, so that should
be OK. c++ also adds -lm explicitly too, even though it wouldn't need
to now. [except for statically linked binaries as .a files don't have an
equivalent of automatic internal shared object dependencies.]