X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..0b5eceb638d6fc9cfa5326cd00b10028fc823187:/src/common/dynlib.cpp?ds=sidebyside diff --git a/src/common/dynlib.cpp b/src/common/dynlib.cpp index cc41e9f693..39c53cd2ee 100644 --- a/src/common/dynlib.cpp +++ b/src/common/dynlib.cpp @@ -50,12 +50,20 @@ # define wxDllGetSymbol(handle, modaddr) DosQueryProcAddr(handle, 1L, NULL, (PFN*)modaddr) # define wxDllClose(handle) DosFreeModule(handle) #elif defined(HAVE_DLOPEN) -# define wxDllOpen(lib) dlopen(lib.fn_str(), RTLD_NOW/*RTLD_LAZY*/) -# define wxDllGetSymbol(handle, name) dlsym(handle, name) + // note about dlopen() flags: we use RTLD_NOW to have more Windows-like + // behaviour (Win won't let you load a library with missing symbols) and + // RTLD_GLOBAL because it is needed sometimes and probably doesn't hurt + // otherwise. On VMS the second argument on dlopen is ignored. +#ifdef __VMS +# define wxDllOpen(lib) dlopen(lib.fn_str(), 0 ) +#else +# define wxDllOpen(lib) dlopen(lib.fn_str(), RTLD_LAZY | RTLD_GLOBAL) +#endif +#define wxDllGetSymbol(handle, name) dlsym(handle, name) # define wxDllClose dlclose #elif defined(HAVE_SHL_LOAD) # define wxDllOpen(lib) shl_load(lib.fn_str(), BIND_DEFERRED, 0) -# define wxDllClose shl_unload +# define wxDllClose shl_unload static inline void *wxDllGetSymbol(shl_t handle, const wxString& name) { @@ -102,7 +110,6 @@ static wxString ConstructLibraryName(const wxString& basename) return fullname; } - // --------------------------------------------------------------------------- // wxLibrary (one instance per dynamic library) // ---------------------------------------------------------------------------