When you compile you create object files.
When you link you create an executable from those files.
If file A uses something in File B then the linker resolves the reference from A to B
If file B uses something in File A then the linker resolves the reference from B to A
So it is one way from that respect.
Object B will not know anything about what objects are linked to it (it can't - how would a generic library know anything about your code?)
Circular references (i.e. from A to B and also from B to A) are (generally speaking) not allowed.