How to avoid multiple definitions in C? Beyond Headers guards

I’m kind of a beginner on software engineering, and I’ve been working on my embedded C largest code ever.

Sometimes I stuck with multiple definitions errors, that points to .o files, what seems to me that it happens on linking time. Im aware about circular dependencies, and about #ifndef #def “guard rails” in the header files, but there might be something im missing. The only way I can get rid off these multiple definitions is placing the definitions in .C rather than .H, what sometimes is very inelegant.