OS X enforces a no duplicate symbol rule when flat namespaces are in use
(the default on OS X). If all the libraries are two-level namespace
libraries (libSystem.dylib, aka libm.dylib is two-level), then duplicate
symbols are mostly ok.

Libtool by default forces a flat namespace in sharedlibraries to work
around an oddity on early OS X systems with undefined references. There's
also a way to make static two-level namespaces (I think), but I haven't
tried that before). You can cause Libtool (and the linker) to be a bit
more sane if you set the environment variable MACOSX_DEPLOYMENT_TARGET to
either 10.3 or 10.4. The shared library rules followed by Libtool and the
compiler chain will then be for that OS X release, rather than for the
original 10.0. We don't support anything older than 10.3, so this isn't
really a problem.

Of course, since the default for users is to emit 10.0 target code, that
can be a bit hard to make work out. So you might want to have a configure
test to figure all that out and not build the IO intercept library in some
cases.