Lua require
来源:互联网 发布:平板windows是什么情况 编辑:程序博客网 时间:2024/04/29 21:01
今天某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中。
问题解决。
- Lua require
- Lua require
- lua -require
- lua require
- lua require
- Lua-require
- lua require
- lua中的require机制
- lua 中 require
- Lua - dofile() , require()
- Lua中的require
- lua require 搜索路径
- Lua中的require
- lua中的require机制
- lua/require函数
- lua中的require机制
- Lua中的require
- Lua require语法问题
- 某大学深圳研究院电话面试
- Python标准模块logging
- 今天被字符串连接搞的头晕,左查右找的,无语,在此做为自己保存文章,以便遗忘
- openerp-web设置自启动(尚未成功)
- 【转】ADCD ZOS IPL启动PARM说明
- Lua require
- listview指定列字体设置
- linux中的usb系统
- 配置nginx 运行CGI(Perl-cgi)
- listview行背景颜色设置
- VC编译错误:error LNK2019: 无法解析的外部符号 "void __stdcall _com_issue_error(long)" (?_com_issue_error@@YGXJ@Z),该符号在函数 "void __cdecl _com_ut
- Silverlight Tools 3 安装时发生严重错误
- 浅谈计算机语言中的字词句段
- Android基于TranslateAnimation的动画动态菜单