Well, when you compile something static the linker does not include all the symbols in the resulting binary, it usually just picks the ones referenced. So if your library A has references to symbols 1, 2 and 3 of library B only those are included. If your application now references symbol 4, 5 and 6 of library B, but is just linked against A (which has only 1, 2 and 3) you will get an linker error and you will have to link against library B again (so the linker can pull out symbol 4, 5 and 6).