[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lua-l
Subject:    Re: Statically linking luasocket
From:       Brian Murphy <brian () murphy ! dk>
Date:       2005-10-21 18:25:44
Message-ID: 435932A8.4090707 () murphy ! dk
[Download RAW message or body]

Issac Trotts wrote:

>
>
> On 10/20/05, *Brian Murphy* <brian@murphy.dk <mailto:brian@murphy.dk>> 
> wrote:
>
>     Issac Trotts wrote:
>
>     > Hi all,
>     >
>     > The installation instructions for luasocket describe how to
>     install it
>     > as a dynamic library.  For my application, it would be preferable to
>     > just compile luasocket in statically, but this only half
>     working.  I
>     > had to change a couple of headers:
>     >
>     Try not changing anything and putting this in your startup code:
>
>         /* package.preload["lsocket"] = luaopen_lsocket */
>         lua_pushstring(L, "lsocket");
>         lua_pushcfunction(L, luaopen_lsocket);
>         lua_settable(L, -3);
>
>         /* package.preload["lmime"] = luaopen_lmime */
>         lua_pushstring(L, "lmime");
>         lua_pushcfunction(L, luaopen_lmime);
>         lua_settable(L, -3);
>
>     this gets the C initialization functions called at the right stage of
>     the module
>     loading process(after the lua code). If you the "C" functions directly
>     then the later require"socket" fails because the module globals are
>     already defined and this
>     is what the package system uses to signal that the module is
>     already loaded.
>
>
> OK, thanks, I'll give that a try.
>
> Issac
>
>
>
Nobody found my deliberate mistake ;).
Here is some code that will actually work:

    lua_newtable(L);
    lua_pushstring(L, "package");
    lua_pushvalue(L, -2);
    lua_settable(L, LUA_GLOBALSINDEX); /* set the global "package" to be
                                          the new table */
    lua_newtable(L);
    lua_pushstring(L, "preload");
    lua_pushvalue(L, -2); /* copy new table */
    lua_settable(L, -4); /* set package.preload to the new table */
    lua_remove(L, -2); /* remove "package" table */

    /* package.preload["lsocket"] = luaopen_lsocket */
    lua_pushstring(L, "lsocket");
    lua_pushcfunction(L, luaopen_lsocket);
    lua_settable(L, -3);

    /* package.preload["lmime"] = luaopen_lmime */
    lua_pushstring(L, "lmime");
    lua_pushcfunction(L, luaopen_lmime);
    lua_settable(L, -3);

sorry for the inconvenience :).

/Brian

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic