From cf72919c8406af6e0dd13935a8ef02c53fb0ddc9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 12 Mar 2005 20:43:58 +0000 Subject: [PATCH] ensure that either RTLD_LAZY or RTLD_NOW is always used as calling dlopen() with flags == 0 fails withrecent glibc versions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32784 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/unix/dlunix.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/unix/dlunix.cpp b/src/unix/dlunix.cpp index cad5a9a22e..dbf286a7d9 100644 --- a/src/unix/dlunix.cpp +++ b/src/unix/dlunix.cpp @@ -191,24 +191,17 @@ wxDllType wxDynamicLibrary::GetProgramHandle() /* static */ wxDllType wxDynamicLibrary::RawLoad(const wxString& libname, int flags) { - wxASSERT_MSG( (flags & wxDL_NOW) == 0, + wxASSERT_MSG( !(flags & wxDL_NOW) || !(flags & wxDL_LAZY), _T("wxDL_LAZY and wxDL_NOW are mutually exclusive.") ); #ifdef USE_POSIX_DL_FUNCS - int rtldFlags = 0; + // we need to use either RTLD_NOW or RTLD_LAZY because if we call dlopen() + // with flags == 0 recent versions of glibc just fail the call, so use + // RTLD_NOW even if wxDL_NOW was not specified + int rtldFlags = flags & wxDL_LAZY ? RTLD_LAZY : RTLD_NOW; - if ( flags & wxDL_LAZY ) - { - rtldFlags |= RTLD_LAZY; - } - if ( flags & wxDL_NOW ) - { - rtldFlags |= RTLD_NOW; - } if ( flags & wxDL_GLOBAL ) - { rtldFlags |= RTLD_GLOBAL; - } return dlopen(libname.fn_str(), rtldFlags); #else // !USE_POSIX_DL_FUNCS -- 2.45.2