首先来windows下编译lua
下载lua源码 http://www.lua.org/ftp/
如果安装了mingw,make.exe所在目录添加到环境变量
命令行进入src目录:
执行 make mingw
生成三个文件,
写一个hello.lua来测试一下:
print('Hello World!!')
双击打开lua.exe
使用命令:dofile('hello.lua')
执行成功
另一个可执行文件luac.exe用于把lua文件编译成用户不可随意修改的代码:
执行如下命令:
luac -o hello.out hello.lua
生成hello.out,该文件同样可以使用lua的dofile执行,但不可以用编辑器查看其源码
有时候我们需要修改lua工程代码:
比如,用Eclipse建工程,使用mingw编译:
把src文件夹复制到工程下,删掉lua.c,luac.c
然后添加自己的源文件:
第一个程序,我们让程序启动就去解析指定的lua文件
/* * main.c * * Created on: 2014-5-15 * Author: Hzy */ #include <stdlib.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" int main (int argc, char **argv) { //开启lua状态机 lua_State* L = luaL_newstate(); //装载lua库 luaL_openlibs(L); //执行脚本 luaL_dofile(L, "hello.lua"); //关闭lua状态机 lua_close(L); getchar(); return EXIT_SUCCESS; }编译后:
用C/C++调用lua写的函数:
先写一个Lua的函数:
function myAdd(i, j) return i + j end
实现加法的功能,
C++中调用:
/* * main.c * * Created on: 2014-5-15 * Author: Hzy */ #include <stdlib.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" lua_State* L = NULL; int myAdd(int x, int y) { int sum; //指定lua里的函数名 lua_getglobal(L, "myAdd"); //将参数压栈 lua_pushnumber(L, x); lua_pushnumber(L, y); //调用函数,2个输入参数,1个返回值, //最后一个参数是出错调用函数 lua_pcall(L, 2, 1, (int)NULL); //获取返回值 sum = (int)lua_tonumber(L, -1); //返回值出栈 lua_pop(L, 1); return sum; } int main (int argc, char **argv) { //开启lua状态机 L = luaL_newstate(); //装载lua库 luaL_openlibs(L); //执行脚本 luaL_dofile(L, "hello.lua"); //调用函数 printf("myAdd result:[%d]\n", myAdd(5, 6)); system("pause"); //关闭lua状态机 lua_close(L); return EXIT_SUCCESS; }
效果:
lua调用C/C++函数:
/* * main.c * * Created on: 2014-5-15 * Author: Hzy */ #include <stdlib.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" lua_State* L = NULL; int myAdd(void) { //获取2个参数检查参数是否是number int x= luaL_checknumber(L, 1); int y= luaL_checknumber(L, 2); //c++实际完成的工作 int c = x + y; //计算结果进栈 lua_pushnumber(L, c); //因为要返回一个参数,所以要return 1 return 1; } int main (int argc, char **argv) { //开启lua状态机 L = luaL_newstate(); //装载lua库 luaL_openlibs(L); //将函数注册到lua lua_register(L, "myAdd", myAdd); //执行脚本 luaL_dofile(L, "hello.lua"); system("pause"); //关闭lua状态机 lua_close(L); return EXIT_SUCCESS; }
lua代码:
print(myAdd(4, 8))
执行效果:
OK
相关推荐
- 可以调用C库,扩展功能边界。 - 良好的错误处理机制和调试工具。 二、Lua-Nginx-Module核心概念 2.1 Lua上下文 在Nginx中,Lua运行在多个上下文中,包括http、server、location、access_by_lua、content_by_lua...
2. **编译Nginx**:在编译Nginx时,需要将lua-nginx-module源码路径作为参数传递给`--add-module`选项。同时,确保已经正确配置了ngx_devel_kit的路径。 3. **配置Nginx**:在Nginx的配置文件中,启用lua模块并指定...
《cocos2d-js/lua游戏解密套件详解》 在移动游戏开发领域,cocos2d-js和cocos2d-lua是常见的游戏引擎,它们为开发者提供了便捷的跨平台开发工具,使得游戏可以在iOS、Android等多个平台上运行。然而,随着游戏市场...
1. **头文件**:例如 `lua.h`、`luac.h` 等,这些头文件定义了 Lua API,供 C/C++ 程序调用 Lua 的函数和结构体,以便在 C 代码中与 Lua 脚本进行交互。 2. **库文件**:`liblua.a` 或 `liblua.so` 是静态和动态...
Luajava是连接这两者的桥梁,它实现了Lua与Java的交互,允许Lua代码调用Java方法,同时也让Java程序可以执行Lua脚本。Luajava的核心是它的绑定机制,通过Java Native Interface (JNI) 实现,使得Lua与Java之间可以...
3. **Lua API**:Nginx-Lua模块提供了丰富的API供开发者调用,包括请求和响应对象、变量、定时器、日志记录、连接池管理等。例如,`ngx.req.get_uri_args()`获取请求的查询参数,`ngx.say()`输出HTTP响应内容,`ngx....
// 处理Lua调用C函数的逻辑 } lua_register(L, "my_c_function", my_c_function); ``` 4. 用`luaL_loadfile(L, "script.lua")`或`luaL_dostring(L, "your_code_string")`加载并执行Lua代码。 5. 调用Lua函数:`lua_...
Java调用Lua脚本是一种常见的跨语言交互技术,特别是在...在Linux环境下,安装和使用LuaJava涉及到编译Lua源码和LuaJava源码,以及配置系统库路径。一旦设置完毕,你就可以在Java应用中自由地利用Lua的强大脚本能力了。
《lua-resty-mongol在OpenResty中的应用与集成》 lua-resty-mongol是基于OpenResty的一个lua库,专为处理MongoDB连接和操作而设计。标题"lua-resty-mongol-master已编译"表明我们已经获取到lua-resty-mongol的最新...
在编译Lua时,你需要确保设置正确的编译选项,如编译器版本、链接器选项等,以确保与lua54.dll兼容。 总的来说,"lua5.4.4-msvc.zip"提供了在Windows上使用Lua所需的基本工具,适用于开发、调试和运行Lua脚本。无论...
luajava是Lua语言与Java平台的交互库,它允许Lua脚本直接调用Java类和方法,同时也让Java程序能够执行Lua代码,实现了两种语言的无缝集成。这个压缩包"luajava-x32-x64.zip"包含了luajava-1.1.jar的64位和32位版本,...
在C/C++程序中,首先需要初始化一个Lua状态机(Lua state),这是执行Lua代码的基础。通过`luaL_newstate()`函数可以创建一个新的Lua状态机,然后使用`luaL_openlibs()`打开标准库,为Lua环境提供基本的函数集。 5...
3. **lapi.c/lapi.o**: 实现了Lua与C之间的接口,包括调用C函数和访问全局变量等功能。 4. **lcode.c/lcode.o**: 编译Lua代码成字节码的模块。 5. **ldebug.c/ldebug.o**: 调试功能相关的实现,如断点、步进等。 6. ...
通过这个过程,你不仅了解了如何在CentOS 64位系统中编译Luajava 1.1,还学习了如何配置环境和使用Luajava调用Java类。这个工具为Lua开发者提供了强大的Java集成能力,使他们能够利用丰富的Java生态资源。
4. **在VS2013中编译lua-cjson**: 打开生成的.sln文件,确保你的解决方案配置为“Release”或“Debug”,并选择合适的CPU目标(x86或x64)。然后,点击“Build Solution”进行编译。编译成功后,你会在指定的输出...
3. **bin2c5.1.exe**:这是一个工具,用于将二进制数据(如预编译的Lua字节码)转换成C语言数组,这样就可以直接将它们嵌入到C/C++项目中。这有助于减少最终程序的体积和启动时间,因为不需要在运行时加载和解析Lua...
同时,luac.exe则用于将hello.lua预编译为hello.luac,这样在后续运行时可以提高执行效率: ```shell luac -o hello.luac hello.lua lua hello.luac ``` 总的来说,"lua-5.4.2_Win64_bin.zip" 提供了一套完整的64...
在本文中,我们将深入探讨如何使用Visual Studio 2019编译Lua 5.4.4源码,创建一个C++库,并演示如何在C++项目中正确地加载和调用Lua脚本。Lua是一种轻量级的脚本语言,广泛应用于游戏开发、系统配置、软件扩展等多...
luajava-1.1.dll则是LuaJava在Windows操作系统上的实现,它是Java Native Interface (JNI)的一部分,允许Java代码直接调用C/C++编写的原生代码。在LuaJava中,这个dll文件用于实现Lua与Java之间的底层交互,处理如...
在自行编译Lua源码时,通常需要遵循以下步骤: 1. **配置**:使用`configure`脚本来配置编译选项,如目标平台、C编译器等。 2. **编译**:运行`make`命令来编译源码生成可执行文件和库文件。 3. **测试**:使用`...