diff --git a/src/Makefile.am b/src/Makefile.am index 2f8e5f6908..0d8d380df1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -51,7 +51,11 @@ AM_LDFLAGS = $(DRIVER_MODULES_LDFLAGS) \ $(CYGWIN_EXTRA_LDFLAGS) \ $(MINGW_EXTRA_LDFLAGS) \ $(NULL) -AM_LDFLAGS_MOD = -module -avoid-version $(AM_LDFLAGS) +AM_LDFLAGS_MOD = \ + -module \ + -avoid-version \ + $(LIBVIRT_NODELETE) \ + $(AM_LDFLAGS) AM_LDFLAGS_MOD_NOUNDEF = $(AM_LDFLAGS_MOD) $(NO_UNDEFINED_LDFLAGS) POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" diff --git a/src/driver.c b/src/driver.c index 52e1ae345a..7d4c78eaaa 100644 --- a/src/driver.c +++ b/src/driver.c @@ -45,6 +45,11 @@ static void * virDriverLoadModuleFile(const char *file) { void *handle = NULL; + int flags = RTLD_NOW | RTLD_GLOBAL; + +# ifdef RTLD_NODELETE + flags |= RTLD_NODELETE; +# endif VIR_DEBUG("Load module file '%s'", file); @@ -55,7 +60,7 @@ virDriverLoadModuleFile(const char *file) virUpdateSelfLastChanged(file); - if (!(handle = dlopen(file, RTLD_NOW | RTLD_GLOBAL))) + if (!(handle = dlopen(file, flags))) VIR_ERROR(_("failed to load module %s %s"), file, dlerror()); return handle;