http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51059
--- Comment #8 from Iain Sandoe <iains at gcc dot gnu.org> 2011-11-11 20:37:39 UTC --- and ... to answer Nathan's question: Darwin's weak works the way you expect -- however the symbol does have to be present at link time. So - one would construct a dylib: foo.dylib: extern __inline int Foo (); __inline int Foo () { return 0; /* count(-) */ } build that: gcc ../tests/foo-dylib.c -dynamiclib -o foo.dylib link with it... gcc ../tests/call-foo-main.c foo.dylib -o cf then the dylib is removed .. rm foo.dylib and ./cf behaves as you would expect (it refers to foo.dylib - but is happy for it to be omitted). ... however, that's a bit long-winded for this case.