Windows: - static module libraries contain the create/destroy functions and the registry structure (because there is just one rule for *.obj files which needs /DSHARED to be present for the static and the DLL version of the module). This has to be fixed deep in the NMAKE build system. Also this requires the derivation of names like $(OBJS:.c:.obj). Maybe also the idea with one header one c file per module and the /SHARED switch there is not a good idea. Push this to the makefile when building *.dll or *.so to pull in a small additional file XXXModule.cpp