-- 编译一个代码文件
-- loadfile (lua_State *L, const char *filename);
-- 将一个文件加载为lua代码块,仅编译不执行,返回值为编译后的
-- 代码块函数和错误信息。
function COMPILE(file)
local fun, err = loadfile(file);
return fun;
end -- 编译并运行一个代码文件
function LOAD_RUN(file)
return require(file);
end -- 载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function LOAD_PATH(path)
-- 取得list.lua的地址
local listPath = path .. "/" .. "list"; -- 加载list,需要加载的所有文件名字
local fileNames = LOAD_RUN(listPath); -- 进行加载
local file = {};
for i = , #fileNames do
local bin = path .. "/" .. fileNames[i];
file[fileNames[i]] = LOAD_RUN(bin);
end
return file;
end -- 卸载目录下的所有文件
function UNLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
-- 设置已经被加载的fileNames[i]为空
package.loaded[path .. "/" .. fileNames[i]] = nil;
end -- 回收内存("collect"做一次完整的垃圾收集循环)
collectgarbage("collect");
end -- 重新载入某个文件
function update(file)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end package.loaded[file] = false;
local ret = require(file); mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
-- 无须开启 gc,否则会导致客户端启动速度变慢,见 SLIMEC-7396
--collectgarbage("collect");
return ret;
end -- 使用代码更新指定文件
function updateByScript(file, script)
local pos = string.find(file,"[^%/.]*$");
local module_name = string.sub(file, pos);
local mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
if type(mod) == "table" and type(mod.destruct) == "function" then
mod.destruct();
end
package.loaded[file] = false; -- 载入
local ret = loadstring(script)(); -- 若该文件为模块,且存在 destruct 方法,则先调用析构方法,再重新加载
mod = package.loaded[module_name];
if not mod then
mod = package.loaded[module_name.."M"];
end if type(mod) == "table" and type(mod.init) == "function" then
mod.init();
end -- 回收垃圾
--collectgarbage("collect"); return ret;
end -- 重新载入一个目录下的所有代码文件(list.lua指明了有哪些文件)
function RRLOAD_PATH(path)
local listPath = path .. "/" .. "list";
local fileNames = LOAD_RUN(listPath);
local file = {};
for i = , #fileNames do
package.loaded[path .. "/" .. fileNames[i]] = nil;
local bin = update(path .. "/" .. fileNames[i]);
file[fileNames[i]] = bin;
end
return file;
end

complier

lua 文件编译相关工具的更多相关文章

  1. LUA的编译、环境等

    Lua的环境.编译等 Lua命令行 lua命令行选项: -i:进入交互式 -e:执行lua代码 -l:加载库文件 例如使用下面的命令启动lua解释器,可以重新定义lua提示符. lua -i -e & ...

  2. Cocos2d-x使用Luajit将Lua脚本编译成bytecode,启用加密

    http://www.cocoachina.com/bbs/read.php?tid=205802 lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(byte ...

  3. 修改Unity中Lua文件的默认打开程序

    项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...

  4. Lua------------------改善Unity编辑器对Lua文件的支持

    原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...

  5. linux 进阶2--C++读取lua文件中的变量、一维表、二维表

    lua 语言非常灵活,一般把lua 作为脚本文件,会用C++与之进行交互.最重要的是C++代码能读取到脚本中的变量.一维表.二维表. 这样有些参数就可以在lua文件进行更改,而不用重新更改C++代码. ...

  6. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    转自:http://www.58player.com/blog-2537-87218.html 项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(b ...

  7. Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新

    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身能够使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行. 以下是使用原生的lua解释器编译字节码: 1 ...

  8. lua文件修改为二进制文件

    注意:lua编译跟luajit编译的二进制文件是不兼容,不能运行的 如果是使用luajit,请直接使用luajit直接编译二进制 第一种:luajit编译(以openresty为例,跟luac是相反的 ...

  9. Ubuntu的多文件编译以及c语言的数组、函数

    闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...

随机推荐

  1. 关于MarkDown里的图片问题

    网上看了很多人为了得到那串URL,需要弄什么python,还有自己弄个服务器. 在我看来这些都是多此一举,只要有个GitHub,然后再开两个页面,一个页面写readme,另一个写issue(不是真的写 ...

  2. 红警大战JAVA简单版

    代码结构: 相关源码: 武器类: 属性:武器,攻击力,子弹数量. 方法:给属性赋值(set属性()方法) 获取属性值(get属性()方法) package 红警大战简单版; public class ...

  3. openwrt 编译

    完整的编译过程: http://www.280i.com/tech/3353.html源更新: https://blog.csdn.net/ypbsyy/article/details/8121836 ...

  4. MyBatis入门2

    一.实现单一查询 1)核心配置文件:Configuration.xml 1 <?xml version="1.0" encoding="UTF-8"?&g ...

  5. L1-Day9

    1.学习让我感觉很棒.(什么关系?动作 or 描述?主语部分是?)         [我的翻译]Learning makes me that feel good.         [标准答案]Lear ...

  6. ASP.NET MVC - Entity Framework

    ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...

  7. 004 使用scrapy框架爬虫

    0. 建立housePro的scrapy爬虫框架 # 1. 在终端输入,建立housePro项目scrapy startproject housePro# 2. 进入houseProcd houseP ...

  8. stat 文件三个时间点

    Linux文件3个时间点(access time,modify time,change time) access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间. 注意:至于为什么会出现 ...

  9. 记一次简单的GetShell案例

    案例链接: http://202.112.51.184:8007/ 打开链接,发现分了多个页面: 挨个点击,大概清楚是上传指定格式的文件然后在搜索的时候使文件执行从而GetShell,观察发现点击每个 ...

  10. ROS与C++

    构建工作空间 catkin_make 构建Catkin包 catkin_create_pkg # This is an example, do not try to run this # catkin ...