.dll 扩展名在 中就足够了LUA_CPATH
(所以它最终在 中package.cpath
)。例如,放入socket.lua
,C:\Foo
并放入core.dll
同一个文件夹。然后require 'socket'
会失败:
> print(package.cpath)
.\?.dll;.\?51.dll;C:\Program Files\Lua\5.1\?.dll;C:\Program Files\Lua\5.1\?51.dl
l;C:\Program Files\Lua\5.1\clibs\?.dll;C:\Program Files\Lua\5.1\clibs\?51.dll;C:
\Program Files\Lua\5.1\loadall.dll;C:\Program Files\Lua\5.1\clibs\loadall.dll
> print(package.path)
;.\?.lua;C:\Program Files\Lua\5.1\lua\?.lua;C:\Program Files\Lua\5.1\lua\?\init.
lua;C:\Program Files\Lua\5.1\?.lua;C:\Program Files\Lua\5.1\?\init.lua;C:\Progra
m Files\Lua\5.1\lua\?.luac
> require 'socket'
.\socket.lua:13: module 'socket.core' not found:
-- look for preload
no field package.preload['socket.core']
-- look for .lua in socket folder anywhere on package.path:
no file '.\socket\core.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket\core.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket\core\init.lua'
...
-- look for .luac in socket folder anywhere on package.path:
no file 'C:\Program Files\Lua\5.1\lua\socket\core.luac'
-- look for .dll in socket folder anywhere on package.cpath:
no file '.\socket\core.dll'
no file '.\socket\core51.dll'
no file 'C:\Program Files\Lua\5.1\socket\core.dll'
no file 'C:\Program Files\Lua\5.1\socket\core51.dll'
no file 'C:\Program Files\Lua\5.1\clibs\socket\core.dll'
no file 'C:\Program Files\Lua\5.1\clibs\socket\core51.dll'
...
stack traceback:
[C]: in function 'require'
.\socket.lua:13: in main chunk
[C]: in function 'require'
stdin:1: in main chunk
[C]: ?
因为socket.lua
需要socket.core
,所以 Lua 解释器core.lua
在任何地方的“socket”文件夹package.path
中寻找,没有找到它(socket 文件夹不存在),然后core.dll
在socket
文件夹中的任何地方寻找package.cpath
,同样的问题。
现在创建C:\Foo\socket
文件夹,然后移动core.dll
到它,然后require 'socket'
就可以工作了(从解释器开始,而 cd 到C:\Foo
)。
在你的情况下,如果你有yourLuaScript.lua
in C:\Foo
,你可以socket.lua
在同一个文件夹中,core.dll
inC:\Foo\socket
和yourLuaScript.lua
canrequire 'socket'
并且只要package.path
contains.\*.lua
和package.cpath
contains .\*.dll
,你就可以运行yourLuaScript.lua
。