所以我从他们的网站上安装了Centos 7软件包档案和Luarocks 2.2.2中的Lua 5.1.4。我尝试通过luarocks install luacurl
安装luacurl。它会在/usr/local/lib/lua/5.1
,/usr/local/lib/luarocks/rocks
和/usr/local/share/lua/5.1
之间拆分文件。我无法弄清楚我应该添加到我的lua包路径中,或者你应该如何配置它。
> lua -e 'print(package.path)'
./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/usr/lib64/lua/5.1/?.lua;/usr/lib64/lua/5.1/?/init.lua
但是当我尝试require("luacurl")
时,我收到以下错误消息
stdin:1: module 'luacurl' not found:
no field package.preload['luacurl']
no file './luacurl.lua'
no file '/usr/share/lua/5.1/luacurl.lua'
no file '/usr/share/lua/5.1/luacurl/init.lua'
no file '/usr/lib64/lua/5.1/luacurl.lua'
no file '/usr/lib64/lua/5.1/luacurl/init.lua'
no file './luacurl.so'
no file '/usr/lib64/lua/5.1/luacurl.so'
no file '/usr/lib64/lua/5.1/loadall.so'
是否对lua包装坚持的标准有很好的参考?试图要求我的luacurl.so
文件实际所在的位置的绝对路径似乎不起作用。
module '/usr/local/lib/lua/5.1/luacurl.so' not found:
no field package.preload['/usr/local/lib/lua/5.1/luacurl.so']
no file './/usr/local/lib/lua/5/1/luacurl/so.lua'
no file '/usr/share/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.lua'
no file '/usr/share/lua/5.1//usr/local/lib/lua/5/1/luacurl/so/init.lua'
no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.lua'
no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so/init.lua'
no file './/usr/local/lib/lua/5/1/luacurl/so.so'
no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.so'
no file '/usr/lib64/lua/5.1/loadall.so'
no file './/usr/local/lib/lua/5.so'
no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5.so'
no file '/usr/lib64/lua/5.1/loadall.so'
require
完全有可能在这里使用正确的功能。
答案 0 :(得分:1)
Lua中有两种类型的require路径:package.path用于纯lua库(.lua),package.cpath用于编译库(.so)。
如果你知道luacurl.so所在的位置($ whereis luacurl.so),那么你可以像这样修改你的cpath:
package.cpath = package.cpath .. ";/usr/local/lib/lua/5.1/?.so"
或放置luacurl.so的地方。只需阅读有关格式的文档(;是分隔符,?是您在需要参数中传递的内容,_转换为/)
答案 1 :(得分:1)
Luarocks会将其自身安装在默认路径中。在要求任何羽绒被之前,请执行以下操作:
require 'luarocks.loader'
这将修改require
,以便在安装了Luack的地方也查找并找到Luack。
如果Lua代码应在其他系统上运行,其中某些系统使用luarocks,而其他系统已在默认搜索路径中安装了库,则可能有必要这样做:
pcall( require, 'luarocks.loader' )
这将允许require在未安装羽绒被的情况下自动失败,并仅继续使用require的默认搜索路径。