Hi all, After some significant headache I discovered a problem introduced by the Cygwin patches for sqlite3. The effect of this patch is that it modifies the DLL search order for all subsequent DLL loads (by filename instead of absolute path) in the application.
It contains the following patch in code which is executed in the library's initialization: sqlite3_vfs_register(&winVfs, 1); +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) + if( cygwin_conv_path ){ + WCHAR buf[MAX_PATH]; + cygwin_conv_path(CCP_POSIX_TO_WIN_W, "/usr/bin", + buf, MAX_PATH*sizeof(WCHAR)); + osSetDllDirectoryW(buf); +#ifdef _WIN32 + }else if( cygwin_conv_to_full_win32_path ){ + WCHAR buf[MAX_PATH]; + char *buf1 = (char *)buf; + int i = MAX_PATH; + cygwin_conv_to_full_win32_path("/usr/bin", buf1); + while(--i>=0) buf[i] = buf1[i]; + osSetDllDirectoryW(buf); +#endif + } +#endif + The call to SetDllDirectoryW modifies the default DLL search path by always inserting /usr/bin, superseding the normal $PATH search. Why it does this I'm not sure. It seems related to this patch, though it's taken on a rather different form over the years: http://sqlite.1065341.n5.nabble.com/Wrong-filename-handling-in-sqlite3-load-extension-for-Cygwin-td74049.html It is related to how sqlite3 searches for extension libraries. Though I'd argue this patch is not even correct, since if the sqlite3 DLL is installed somewhere other than /usr/bin (say /usr/local/bin) this patch still won't be correct. This is a problem since after using sqlite3 in an application, subsequent DLL searches will always default to looking in /usr/bin before any overrides I have on $PATH. Is there any way we can get this fixed? Thanks, Madison -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple