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
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user