This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
[PATCH 4/4] dlopen: on unspecified lib dir search exe dir
- From: Michael Haubenwallner <michael dot haubenwallner at ssi-schaefer dot com>
- To: cygwin-patches at cygwin dot com
- Cc: michael dot haubenwallner at ssi-schaefer dot com
- Date: Wed, 31 Aug 2016 20:07:09 +0200
- Subject: [PATCH 4/4] dlopen: on unspecified lib dir search exe dir
- Authentication-results: sourceware.org; auth=none
- References: <1472666829-32223-1-git-send-email-michael.haubenwallner@ssi-schaefer.com>
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