http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56431
--- Comment #3 from Ian Lance Taylor <ian at airs dot com> 2013-02-27 18:49:43 UTC --- Object OBJ has a weak reference to SYM. OBJ is linked against shared library S1. S1 does not define SYM. S1 happens to be linked against shared library S2. S2 does define SYM. That will work fine: at runtime OBJ will see that SYM is defined, because S1 brings in S2. Suppose that, later on, S1 is not linked against S2. That will also work fine: at runtime OBJ will see that SYM is not defined. Right now GNU ld is issuing a warning because it sees that the weak reference from OBJ will be defined at runtime by S2, brought in at runtime because S1 is linked against S2. GNU ld is suggesting that OBJ should be linked against S2 directly. But nothing will go wrong if S1 is changed such that it does not link against S2. Therefore, GNU ld's warning is inappropriate. There is no reason to link OBJ against S2 in this case.