Static linking seems the easiest choice.
You could have a separate launcher program that verifies the installation before running the main program.
Or you could do dynamically loading. I cant remember if delay loaded DLL's avoid the startup check, but if they do that is simple, just try a LoadLibrary before you call any function in the DLL.
If not you would have to not link with it at all and GetProcAddress everything which is a pain unless you have an interface based design with minimum exported functions (similar to COM, so just a "CreateFactory" or such to GetProcAddress).
I would question why this is needed though? A user should almost never be able to get into a situation that a DLL is missing and if your trying to cover "all things" then that is basically never ending.