[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Path change to LUA_CPATH in Lua Binaries
- From: Ross Berteig <Ross@...>
- Date: Wed, 27 Aug 2008 15:04:27 -0700
On 8/27/2008, RJP Computing wrote:
Yes I think this is a bit of a heavy approach, plus we still
need to be able
to run 'lua' on the command line so the PATH will still need to
One approach would be to patch package.loadlib() for Windows so
that the PATH is updated in the current process environment just
before each DLL is loaded. The updated PATH should include both
lua.exe's folder and the folder from package.cpath where the DLL
was found. That would permit Lua modules that need additional
DLLs to get them from the "standard" DLL search path without
requiring that the system PATH be modified any more than
necessary to support command-line use of lua.exe. In fact, an
application based on wlua.exe and IUP need not modify the system
path at all in this case.
Another (better?) approach might be to patch package.loadlib()
for Windows to use LoadLibraryEx() with the flag
LOAD_WITH_ALTERED_SEARCH_PATH instead of LoadLibrary(). That
flag is supposed to modify the search path used for implicitly
linked DLLs to include the folder where the explicitly loaded
DLL is located. According to MSDN, this feature has existed
since Win95, although this is the first time I've noticed it in
the documentation myself.
On a new enough version of Windows (XP SP2 I think),
SetDLLDirectory() could probably be used instead of changing PATH.
Incidentally, I suspect that LuaRocks will have issues unless
something like this is done because it scatters its installed
rocks in a tree and implicit DLLs required by (and delivered
with) a rock will have trouble loading when the rock is loaded
by its customized require().
In any case, this is clearly something that should be done in
the low level module loader, and not imposed as an external
requirement on PATH to get complex DLL modules to work right.
Ross Berteig Ross@CheshireEng.com
Cheshire Engineering Corp. http://www.CheshireEng.com/