加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua require

发布时间:2020-12-14 22:13:38 所属栏目:大数据 来源:网络整理
导读:今天某XXX.lua脚本中 local socket = require"socket" 死活通不过。这里是c++调用的lua脚本。 如果直接脚本解释器中运行? lua XXX.lua是能通过的。 ? lua调用库,要C++中显式加载模块如luaopen_socket(L);估计是没加载。 查了下: ? ? Lua的require:require

今天某XXX.lua脚本中 local socket = require"socket" 死活通不过。这里是c++调用的lua脚本。


如果直接脚本解释器中运行? lua XXX.lua是能通过的。

?

lua调用库,要C++中显式加载模块如luaopen_socket(L);估计是没加载。


查了下:

?

?

Lua的require:require (modname)
用于加载指定的模块。
   此函数先检测package.loaded表中是否存在modname,存在则直接返回当中的值,没有则通过定义的加载器加载modname。
查找加载器顺序:
??? (1)检测package.preload表是否存在modname,有则加载
??? (2)通过Lua Loader加载,通过查找存放于package.path的路径加载,有则加载
??? (3)通过C Loader加载,通过查找存放于package.cpath的路径加载,有则加载
??? (4)通过all-in-one Loader加载:
???   通过查找modname.dll并查找当中的luaopen_<XXXX>
???   其中XXXX为载块名-后的字符用_替换.后的字符:如:a.v1-b.c 当函数名为luaopen_b_c
??? 当require查找的不是一个Lua库或C库,它就会调用all-in-one loader,此加载器是用C路径作为载块的目录,
??? 当查找到合适的加载器时,require就会加载其中的模块,当加载器有返回值,将会存放于package.loaded[modname]表。最后返回package.loaded[modname]表
??? 当加载失败时,require将触发错误

package.cpath
功能:用于require C loader的搜索路径,为模式串
可以通过修改LUA_CPATH变量(luaconf.h)修改此值

package.path
功能:用于require Lua loader的搜索路径
同样可以通过修改LUA_PATH变量(luaconf.h)修改此值

?

?

?

?

于是我把直接命令行下打印出的package.path??? package.cpath记下。

然后手动添加(不是替换)到 c++调用的lua的package.path??? package.cpath中。

?

问题解决。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读