I know why (I think), IIRC the linker does a single pass of the files, when you have lib/ft/libmbusmaster.a before client.o it looks in lib/ft/libmbusmaster.a and because it hasn't seen anything yet that uses it discards all of it. Then it tries to link client.o and finds lots of unresolved externals.
The other way round in looks in client.o first, finds lots of unresolved externals then looks in lib/ft/libmbusmaster.a and resolves them.