From a7ac75f15d78dd852b1b6e49bf73c801a1bd9c66 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 25 Feb 2017 13:57:48 -0700 Subject: [PATCH] use RTLD_LOCAL when loading extensions on Mac OS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It appears that Mac OS wants `RTLD_LOCAL` in the dlopen() call, otherwise dlsym() searches through all previously open shared objects – even though dlopen() is given a specific library handle. --- racket/src/racket/src/dynext.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/racket/src/racket/src/dynext.c b/racket/src/racket/src/dynext.c index c3615b66bc..ab8076aa14 100644 --- a/racket/src/racket/src/dynext.c +++ b/racket/src/racket/src/dynext.c @@ -47,7 +47,9 @@ static Boolean get_ext_file_spec(FSSpec *spec, const char *filename ); static Boolean load_ext_file_spec(FSSpec *spec, CFragConnectionID *connID); #endif -#if defined(RTLD_NOW) +#if defined(OS_X) +# define DLOPEN_MODE (RTLD_NOW | RTLD_LOCAL) +#elif defined(RTLD_NOW) # define DLOPEN_MODE (RTLD_NOW) #elif defined(RTLD_LAZY) # define DLOPEN_MODE (RTLD_LAZY)