Lua从本地路径导入库(luasocket)
我是Lua的新手,导入机制有一些问题。Lua从本地路径导入库(luasocket),lua,luasocket,Lua,Luasocket,我是Lua的新手,导入机制有一些问题。 从其他语言来看,我习惯于这样做: include "./lib/mylib.h" 或者通常只是将本地路径传递给我想要包含的文件 现在在卢阿,我有点困惑。我读到一些关于require在lua路径中查找库的信息。 在我的例子中,我想创建一个使用luasocket库的脚本,但我想从本地路径导入它,这样我就可以部署它,而无需将它部署到lua路径中的另一台机器上 从其他论坛上,我得到了一些解决方案,比如创建一个localrequire函数,该函数在给定的本地库文件
从其他语言来看,我习惯于这样做:
include "./lib/mylib.h"
或者通常只是将本地路径传递给我想要包含的文件
现在在卢阿,我有点困惑。我读到一些关于require
在lua路径中查找库的信息。在我的例子中,我想创建一个使用luasocket库的脚本,但我想从本地路径导入它,这样我就可以部署它,而无需将它部署到lua路径中的另一台机器上 从其他论坛上,我得到了一些解决方案,比如创建一个
local
require函数,该函数在给定的本地库文件夹中查找,但不起作用
然后我读到我可以键入require'myfile'
在本地导入不同的文件,但是luasocket需要core.dll,如果我只是将库的lua文件移动到本地路径,它就找不到dll
有没有一个简单的方法来解决这个问题。我必须做些什么才能使它正常工作?将.dll扩展名放在
LUA\u CPATH
中就足够了(因此它最终会出现在包.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解释器在package.path
上的“socket”文件夹中的任何位置查找core.lua
,但找不到它(socket文件夹不存在),然后在package.cpath
上的socket
文件夹中查找core.dll
,同样的问题
现在创建C:\Foo\socket
文件夹,并将core.dll
移动到该文件夹中,然后require'socket'
将起作用(从cd启动解释器到C:\Foo
)
在你的例子中,如果你在
C:\Foo
中有yourLuaScript.lua
,你可以在同一个文件夹中有socket.lua
,在C:\Foo\socket
中有yourLuaScript.lua
可以要求“socket”
,只要package.path
包含\*.lua
,并且package.cpath
包含\*.dll
,您将能够运行您的luascript.lua
我正在使用ubuntu,因此没有文件core.lua