lua学习:lua环境搭建
来源:互联网 发布:求最小公倍数的算法 编辑:程序博客网 时间:2024/05/09 01:42
Lua除了是一门扩展的言语外,还是一门“胶水语言”。最著名的就是作为游戏的脚本开发。
这里主要说lua怎样与c交互。
Lua和c语言通信的主要方法是一个无所不在的虚拟栈。几乎所有的API调用都会操作这个栈上的值。所有的数据交换,无论是Lua到C语言或C语言到Lua都通过这个栈来完成。栈可以解决Lua和C语言之间存在的两大差异,第一种差异是Lua使用垃圾收集,而C语言要求显式地释放内存;第二种是Lua使用动态类型,而C语言使用静态类型。
下载好Lua源码,可以选择在不同的平台编译,编译也很简单,下面是在windows下的编译方法。(我用的是lua5.1,感觉新版本变化很大,相应的教程也没有5.1的多。)
1.打开vs的命令行工具,工具-->visual studio 2005 command prompt
2.跳转到 etc的上一级目录,如:cd /d d:\lua
2.执行:etc\luavs.bat( 注意,是 \ 不是 /,写错了不能执行编译 )
3.然后lua51.dll, lua51.lib, lua.exe, and luac.exe就生成在 src路径下了。
当然,也可以自定义生成文件的名字,具体请看luavs.bat。
然后就可以编写第一个c与lua交互的程序。
#include <stdio.h>#include <string.h>extern "C" {#include "lua.h"#include "lauxlib.h"#include "lualib.h"}#pragma comment(lib, "lua.lib")int main(void){char buff[256];int error;lua_State *L = luaL_newstate();//创建一个新的环境luaL_openlibs(L);//打开标准库while(fgets(buff,sizeof(buff),stdin)!=NULL){error = luaL_loadbuffer(L,buff,strlen(buff),"line") || lua_pcall(L,0,0,0);if (error){fprintf(stderr,"%s",lua_tostring(L,-1));lua_pop(L,1);//从栈中弹出错误消息}}lua_close(L);return 0;}
ps:
luaL_newstate用c运行库的内存分配函数。
lua_newstate可自定义内存分配函数。
头文件lua.h定义了lua提供的基础函数,包括创建lua环境、调用lua函数(如lua_pcall)、读写lua环境中全局变量,以及注册供lua调用的新函数等。Lua.h中定义所有内容都有一个lua_前缀。
头文件lauxlib.h定义了辅助库(auxiliary library,auxlib)提供的函数。它的所有定义都以luaL_开头(如luaL_loadbuffer)。辅助库是一个使用lua.h中API编写出的一个较高的抽象层。Lua的所有标准库编写都用到了辅助库。
注意:Lua脚本的编译执行是相互独立的,在不同的线程上执行。通过luaL_newstate()函数可以申请一个虚拟机,返回指针类型lua_State。今后其他所有Lua Api函数的调用都需要此指针作为第一参数,用来指定某个虚拟机。所以lua_State代表一个lua虚拟机对像,luaL_newstate()分配一个虚拟机。lua类库管理着所有的虚拟机。销毁指定虚拟机的所有对像(如果有垃圾回收相关的无方法则会调用该方法)并收回所有由该虚拟机动态分配产生的内存,在有些平台下我们不需要调用此函数,因为当主程序退出时,资源会被自然的释放掉,但是但一个长时间运行的程序,比如后台运行的web服务器,需要立即回收虚拟机资源以避免内存过高占用。
因为lua5.0到lua5.2接口略有变化,环境搭建也略有不同,详情看源码下的README。
扩展阅读:
Lua 5.1 参考手册:http://www.codingnow.com/2000/download/lua_manual.html
lua users wiki:http://lua-users.org/wiki/
- lua学习:lua环境搭建
- 【Lua学习之一】搭建Lua环境 并显示HelloWorld!
- lua学习笔记1---VC下lua环境的搭建
- lua学习:ubuntu下lua环境的搭建
- Lua学习之Mac下搭建lua环境
- lua学习之入门:环境搭建
- Lua 学习教程之环境搭建(一)
- Lua环境搭建
- lua环境搭建
- Lua开发环境搭建
- cocos2d lua 环境搭建
- lua+VS环境搭建
- macos lua环境搭建
- cocos2d lua 环境搭建
- lua mac环境搭建
- Lua 环境搭建 --Linux
- macos lua环境搭建
- lua环境搭建
- Selenium IDE 2.0发布!
- load,get根本区别,以及持久化load上来的游离对象
- 常见Flex net License错误代码
- IOS最新资料大全
- HTTP Status 404(The requested resource is not available)的几种解决方法
- lua学习:lua环境搭建
- java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
- java——继承
- Linux/Unix shell 脚本监控磁盘可用空间
- 玩玩CUBLAS(2)——level1函数
- K路归并排序 获取多个日志文件中时间最近的那些数据
- sqlserver 不同服务器的访问
- 2dx 动画使用方法
- 【转】JAVA中的内联函数