Allerdings habe ich zu diesem Verhalten bisher nichts "Offizielles" gefunden; nur Posts auf stackoverflow und Ähnliches (besonders akribisch habe ich aber auch nicht gesucht).
Es steht etwas umständlich in der Doku:
-l library
...
It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, ‘foo.o -lz bar.o’ searches library ‘z’ after file foo.o but before bar.o. If bar.o refers to functions in ‘z’, those functions may not be loaded.
...
The linker handles an archive file by scanning through it for members which define symbols that have so far been referenced but not defined.
Beim Linken von statischen Libs werden nur die bisher verwendeten Referenzen aufgelöst. Wenn nach dem Linken einer Lib zusätzliche Referenzen dazu kommen werden diese nicht nachträglich aufgelöst. Das wird aus Performance Gründen gemacht, aber für zyklische Abhängigkeiten lässt sich mit --start-group/--end-group veranlassen das so lange die Libs durchlaufen werden bis die Referenzen durch sind.