Lua require

转载 2013年12月05日 14:03:32

今天某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 函数详解 (转)

require函数详解(转)  --------》》》  http://blog.sina.com.cn/s/blog_5a6f39cf01016yxs.html 贴原文如下 简介 require函数...
  • duke_geng
  • duke_geng
  • 2014年12月10日 11:39
  • 1298

重写require使lua文件模块化

lua文件模块化目标: 没有声明local的变量不会加入到全局变量,而是作为模块的变量 访问模块变量一律使用 "模块名.变量名"的形式 模块中使用显示的方式访问全局变量 ...
  • oracleot
  • oracleot
  • 2014年02月20日 22:55
  • 6272

lua require与module

一、模块机制module     1.什么是module 对于用户来说,一个module相当于一个so库。模块的主要目标是实现代码的共享。     2.如何编写module ...
  • bosswanghai
  • bosswanghai
  • 2016年12月24日 15:50
  • 859

lua 中 require

在lua 5.0 中require:       require的另一个功能是避免重复加载同一个文件两次。Lua保留一张所有已经加载的文件的列表(使用table保存)。如果一个加载的文件在表中存在re...
  • yys213
  • yys213
  • 2011年06月23日 11:09
  • 2467

Lua的require使用

一.require的作用 1. 加载指定的模块,相当与#include作用类似,加载了该模块,那么就可已使用模块中的全局函数和全局数据(如表等等) 注:实际上require “xxx”后,会将xx...
  • qweewqpkn
  • qweewqpkn
  • 2015年10月11日 19:13
  • 11547

Lua中的require

主要翻译自lua文档,加上了programming lua中自己的一些理解 require(modname) 加载给定的模块.函数首先检查表package.loaded来判定modname是否已经存在...
  • aisajiajiao
  • aisajiajiao
  • 2014年02月17日 13:17
  • 33662

lua关于require和package.loaded常被忽略的故事

用require函数只能加载一次,因为它的特性是: 1、require函数会搜索目录加载文件 2、require会判断是否文件已经加载避免重复加载同一文件。 而这个特性二,虽然我们可能知道这两个特性,...
  • u013174689
  • u013174689
  • 2014年11月22日 09:44
  • 4740

C++ 中lua require 失败

错误描述:C++中调用lua脚本,lua中有require “lfs”。出现以下错误。 1031 16:19:36 298 [0x00000001]Execute script failed, er...
  • CanNotComplain
  • CanNotComplain
  • 2016年11月01日 15:15
  • 910

lua中的用require不会循环引用

可以把所有头文件都require写在一个Lib文件中,从而可以以后再不同的lua文件中都可以访问到其它lua文件,这比c++可以说方便多了。...
  • themagickeyjianan
  • themagickeyjianan
  • 2016年05月05日 11:33
  • 1114

quick源文件中关于import和require的区别

载入一个模块 import() 与 require() 功能相同,但具有一定程度的自动化特性。 假设我们有如下的目录结构: ~~~ app/ app/classes/ app/clas...
  • u012723995
  • u012723995
  • 2014年10月25日 19:13
  • 5598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lua require
举报原因:
原因补充:

(最多只允许输入30个字)