When loading shared library given its name, systems searches for the actual file (eg .dll) in some directories, based on search order, or in cache.
How can I programmatically get the resolved path of DLL given its name, but without actually loading it? E.g. on Windows, for kernel32
or kernel32.dll
it would probably return C:\windows\system32\kernel32.dll
whereas given foo
it could be C:\Program Files\my\app\foo.dll
.
If that can't be done, is there another way to determinate whether certain library belongs to system? E.g. user32.dll
or libc.so.6
are system libraries but avcodec-55.dll
or myhelperslib.so
are not.
I'm interested solutions that work on Windows, Linux and Mac OS.