Applications installed to some prefix like /opt/application do expect dlopen("libAPP.so") to load "/opt/application/bin/cygAPP.dll", which is similar to "/opt/application/lib/libAPP.so" on Linux.
See also https://cygwin.com/ml/cygwin-developers/2016-08/msg00020.html * dlfcn.cc (dlopen): For dlopen("N"), search directory where the application executable is in. --- winsup/cygwin/dlfcn.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc index f8b8743..974092e 100644 --- a/winsup/cygwin/dlfcn.cc +++ b/winsup/cygwin/dlfcn.cc @@ -232,6 +232,12 @@ dlopen (const char *name, int flags) not use the LD_LIBRARY_PATH environment variable. */ finder.add_envsearchpath ("LD_LIBRARY_PATH"); + /* Search the current executable's directory like + the Windows loader does for linked dlls. */ + int exedirlen = get_exedir (cpath, wpath); + if (exedirlen) + finder.add_searchdir (cpath, exedirlen); + /* Finally we better have some fallback. */ finder.add_searchdir ("/usr/bin", 8); finder.add_searchdir ("/usr/lib", 8); -- 2.7.3