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:
Vadim Zeitlin
2005-03-12 20:43:58 +00:00
parent e62e17d735
commit cf72919c84

View File

@@ -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