My C compiler, Lance, always had a nasty dependency that I wanted to get rid of.
The linker.
So I made my own linker (for ELF), that can link in glibc and link crt*.o files, that prepare for and call main, into the final executable, as shown in the example.
Lance's linker resolves the strings that are passed to printf statically, resolves various relocation types, and it resolves printf dynamically, using a PLT/GOT and setting up necessary structures for .so library loading
Lance also automatically finds glibc so that it's very hassle-free to write programs that use libc.
So now, my C compiler has no more dependencies except glibc