Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua从本地路径导入库(luasocket)_Lua_Luasocket - Fatal编程技术网

Lua从本地路径导入库(luasocket)

Lua从本地路径导入库(luasocket),lua,luasocket,Lua,Luasocket,我是Lua的新手,导入机制有一些问题。 从其他语言来看,我习惯于这样做: include "./lib/mylib.h" 或者通常只是将本地路径传递给我想要包含的文件 现在在卢阿,我有点困惑。我读到一些关于require在lua路径中查找库的信息。 在我的例子中,我想创建一个使用luasocket库的脚本,但我想从本地路径导入它,这样我就可以部署它,而无需将它部署到lua路径中的另一台机器上 从其他论坛上,我得到了一些解决方案,比如创建一个localrequire函数,该函数在给定的本地库文件

我是Lua的新手,导入机制有一些问题。
从其他语言来看,我习惯于这样做:

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