I know linux etc have ld but what about windows? I don't want to need to install the full mingw/mingw64 devkits for what I'm making, I'd even be fine with manually implementing the linker if I have to (though I'd really rather not).

Basically I've settled on a possible solution for cross-platform development that does not directly hook into the system APIs (separate library for that) and I need a linker for the final step to be available on each system, regardless of if gcc/mingw tool collections are installed. The basic idea is that the object files are distributed within the directory setup I have for each architecture & data model and then have them linked into the final application/library and launched on the host system. Would be the equivalent of

Code:
gcc -o $name$(EXE_EXT) $(OTG_DIR)/.paw/$(PAW_OS_ABI)/main.o $(OTG_DIR)/.paw/$(PAW_ABI)/$name/obj1.o $(OTG_DIR)/.paw/$(PAW_ABI)/$name/obj2.o ... -lpaw1 $(LIBS) && ./$name$(EXE_EXT)
Which naturally means the developer would not need to know the target operating system, just the target architecture and data model which is significantly easier to develop for.

I know I'll probably have to implement a custom library format eventually for systems that don't have native support for dynamic libraries but that's for a later version of the library and launcher pair, for now I'm hoping to offload that as much as possible without making the entire devkits a pre-requisite.