首先来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
相关推荐
这是编译好的dll(带demo),cURL比luacurl功能强大的多,项目源码及使用: https://github.com/Lua-cURL/Lua-cURLv3
lua动态链接库的编译 c++调用lua的的方法 linux中调用lua的环境配置
vs2019编译lua脚本C++库,可正常加载调用lua,lua5.4.4最新版本。里面包含了调用demo
这是一组全局函数,当您在您的应用程序中实现一个能被LUA调用的函数时候,需要用到这些函数。主要是数据交换相关。包含 LUA取参数数目、LUA取参数类型、LUA取参数值、LUA加返回值、LUA扩展栈。后续版本可能会根据...
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。 Lua由...
lua 位操作源码 ,里面包含doc文档,可以自行makefile 编译成dll来调用
(1)编译意味着将模板转换为您可能会调用或调用的Lua函数或将string.dump作为二进制字节码blob string.dump到磁盘,以便以后与lua-resty-template或基本的load和loadfile标准Lua函数一起使用(请参阅以及)。...
本工程是Lua必然C扩展的内置工程,用于运行调试 所有Lua源码来自lua官方网站[ ] 增加了二进制注释,扩展了一些功能,支持Debug / Release编译模式 整个工程PC端编译整合采用cmake来管理,支持跨平台(可以在树莓派上...
cpp中调用lua, 和注册方法到lua中, 及lua中调用cpp的类方法等, 库路径 -https://github.com/radiotail/eluna
实现LUA中调用C++类,并对其封装, LINUX下编译
2.配置项目编译环境,把lua和tolua++类库和搜索路径包括进项目来。 2.双击build_pgk.bat 会新生成lua_hello.h调用文件。 3.运行编译即可看到我们的tolua++版的Hello world.这个程序实现了脚本调用C++类的成员函数...
Lua 5.3.0源码,其中带VS2012的解决方案和项目文件。...但是,Lua5.3.0的编译器luac.c中调用了非Lua Dll导出的函数和数据结构,所以Lua编译器只能编译成链接静态库。Lua解释器则没有这个问题,可以链接静态和动态库。
Lua 5.2.2源码,其中带VS2012的解决方案和项目文件。...但是,Lua5.2.2的编译器luac.c中调用了非Lua Dll导出的函数和数据结构,所以Lua编译器只能编译成链接静态库。Lua解释器则没有这个问题,可以链接静态和动态库。
quick-cocos2dx 用lua调用自定义c++类,教程非常详细有截图。本来经过整整一天,最后通过一位网友的远程才搞定的。
windows下使用mingw的gcc编译工具,使用测试代码实现使用c调用lua脚本,包括传入参数和返回值的模式和无参数传递的模式的具体实现。
将C++类导出为.so,并提供给lua调用
前言 第一次接触Lua是因为Unity游戏中需要...在lua中调用C函数可以提高程序的运行效率。lua与C的相互调用在工程中相当实用,本文就来讲解lua与C相互调用的方法。这次打算好好了解一下C跟lua是如何交互的 那么如何使用L
c++与lua相互调用编程实例(vs2012 win32工程). 载入项目后,请重新编译一下lua源码项目。 参考 ... Cpp_lua_call项目应该放lua源码,cpp_call_lua项目放的是c++和lua调用代码。
NULL 博文链接:https://chamcon.iteye.com/blog/1972995