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

lua与c++结合

发布时间:2020-12-14 22:20:48 所属栏目:大数据 来源:网络整理
导读:? 1.简介 Lua与C/C++结合是很紧密的,Lua与C++交互是建立在Lua与C的基础上的,所 以偶先从Lua与C讲起. 正如第一讲所说,运行Lua程序或者说调用Lua主要有两种方式: * 通过命令行执行"Lua"命令 * 通过Lua的C库 虽然此前偶们一直用第一种方式,但偶要告诉你,通过Lua
? 1.简介

Lua与C/C++结合是很紧密的,Lua与C++交互是建立在Lua与C的基础上的,所
以偶先从Lua与C讲起.
正如第一讲所说,运行Lua程序或者说调用Lua主要有两种方式:
* 通过命令行执行"Lua"命令
* 通过Lua的C库
虽然此前偶们一直用第一种方式,但偶要告诉你,通过Lua的C库执行才是游戏中
常用的方式.
2.Lua的C库
Lua的C库可以做为Shared Library调用,但一般开发游戏时会把Lua的所有源程序
都包含在内,并不把Lua编译成共享库的形式. 因为Lua程序只有100多K,而且几乎
可以在任何编译器下Clean Compile. 带Lua源程序的另一个好处时,可以随时对Lua
本身进行扩充,增加偶们所需的功能.
Lua的C库提供一系列API:
* 管理全局变量
* 管理tables
* 调用函数
* 定义新函数,这也可以完全由C实现
* 垃圾收集器Garbage collector,虽然Lua可以自动进行,但往往不是立即执行的,
?? 所以对实时性要求比较高的程序,会自己调用垃圾收集器
* 载入并执行Lua程序,这也可以由Lua自身实现
* 任何Lua可以实现的功能,都可以通过Lua的C API实现,这对于优化程序的运行速度
?? 有帮助. 经常调用的共用的Lua程序片断可以转成C程序,以提高效率. 连Lua都是C写的
?? 还有什么C不能实现呢?
??
3.Lua与C集成的例子
例e10.c
/* A simple Lua interpreter. */?
#include <stdio.h>?
#include <lua.h>?
int main(int argc,char *argv[]) {?????
char line[BUFSIZ];?????
lua_State *L = lua_open(0);?????
while (fgets(line,sizeof(line),stdin) != 0)?????????
lua_dostring(L,line);?????
lua_close(L);?????
return 0;?
}
编译
Linux/Cygwin
* 先编译Lua,并把头文件放入include路径
* gcc e10.c -llua -llualib -o e10
VC6/VC2003
* 新建工程,在工程配置中加入附加库lua.lib和lualib.lib
* 编译成exe
运行结果
本程序的功能是实现一个Lua解释器,输入的每行字符都会被解释成Lua并执行.
程序说明
* #include <lua.h> 包含lua头文件,然后才可以使用API
* lua_State *L = lua_open(0) 打开一个Lua执行器
* fgets(line,stdin) 从标准输入里读入一行
* lua_dostring(L,line) 执行此行
* lua_close(L) 关闭Lua执行器
例e11.c
/* Another simple Lua interpreter. */?
#include <lualib.h>?
lua_baselibopen(L);?????
lua_iolibopen(L);?????
lua_strlibopen(L);?????
lua_mathlibopen(L);?????
与上例不同的是,本例调用了Lua的一些标准库.
* #include <lualib.h> 包含Lua的标准库
* 以下这几行是用来读入Lua的一些库,这样偶们的Lua程序就可以有更多的功能.
lua_mathlibopen(L);?
4.试试看
把上面两个小例子在你熟悉的编译器中编译执行,并试试能否与Lua源码树一起编译

(编辑:李大同)

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

    推荐文章
      热点阅读