[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Behavior of dlopen in MacOSX
- From: "Antonio Scuri" <scuri@...>
- Date: Tue, 17 Jan 2012 19:19:17 -0200
So maybe in MacOSX It should be always RTLD_GLOBAL.
Best,
Scuri
> -----Original Message-----
> From: lua-l-bounces@lists.lua.org [mailto:lua-l-bounces@lists.lua.org] On
> Behalf Of Tony Finch
> Sent: terça-feira, 17 de janeiro de 2012 18:21
> To: Lua mailing list
> Subject: Re: Behavior of dlopen in MacOSX
>
> Antonio Scuri <scuri@tecgraf.puc-rio.br> wrote:
> >
> > Inspecting the code, I changed the following line:
> >
> > void *lib = dlopen(path, RTLD_NOW | (seeglb ? RTLD_GLOBAL :
> > RTLD_LOCAL));
> >
> > to (the same as it was in Lua 5.1):
> >
> > void *lib = dlopen(path, RTLD_NOW);
> >
> > Then it works.
>
> dlopen() without an explicit RTLD_GLOBAL or RTLD_LOCAL flag is not
> portable. On Mac OS X the default is RTLD_GLOBAL but on many other
> systems it is RTLD_LOCAL.
>
> You need to arrange for the right value in the seeglb parameter. For
instance,
>
> package.loadlib (libname, funcname)
>
> Dynamically links the host program with the C library libname.
>
> If funcname is "*", then it only links with the library, making the
> symbols exported by the library available to other dynamically linked
> libraries. Otherwise, it looks for a function funcname inside the
> library and returns this function as a C function. (So, funcname must
> follow the prototype lua_CFunction).
>
> The require() mechanism passes luaopen_<modname> as the function
> name, so when loading modules in the usual way the RTLD_LOCAL flag is set.
>
> Tony.
> --
> f.anthony.n.finch <dot@dotat.at> http://dotat.at/
> Trafalgar: Variable 3 in northwest, northerly veering northeasterly 4 or
5,
> increasing 6 at times in southeast. Moderate or rough. Rain or showers.
> Moderate or good.