热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++与lua互相调用

cc与lua互相调用如需转载请标明出处:http:blog.csdn.netitas109QQ技术交流群:129518033文章目录cc与lua互相调用
c/c++与lua互相调用

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

文章目录

  • c/c++与lua互相调用
    • 1.lua简介
    • 2.lua安装
      • 2.1 windows
      • 2.2 linux
    • 3.c/c++调用lua
    • 4.lua调用c/c++



环境:

lua:5.3.5(2018-06-26)

mingw:7.3.0 64bit

gcc:4.9.3

1.lua简介

Lua是一种强大,高效,轻量级,可嵌入的脚本语言。 它支持过程编程,面向对象的编程,功能编程,数据驱动的编程和数据描述。

Lua将简单的过程语法与基于关联数组和可扩展语义的强大数据描述结构结合在一起。 Lua是动态类型的,可通过基于寄存器的虚拟机解释字节码来运行,并具有带有增量垃圾回收的自动内存管理功能,因此非常适合配置,脚本编写和快速原型制作。

2.lua安装


2.1 windows

set path=D:\Qt\Qt5.12.9\Tools\mingw730_64\bin;%path%
set include=D:\Qt\Qt5.12.9\Tools\mingw730_64\include;%include%
set lib=D:\Qt\Qt5.12.9\Tools\mingw730_64\lib;%lib%cd lua-5.3.5\src
mingw32-make mingw

可以得到liblua.a和lua53.dll

2.2 linux

sudo apt-get install libreadline-dev
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux

默认生成的是liblua.a静态库,如果需要动态库需求修改Makefile

3.c/c++调用lua

// hello.luaprint "hello lua"

//main.cpp#include "lua.hpp"int main()
{lua_State *lua_state = luaL_newstate();static const luaL_Reg lualibs[] ={{ "base", luaopen_base},{ NULL, NULL}};const luaL_Reg *lib = lualibs;for(; lib->func != NULL; lib++){luaL_requiref(lua_state, lib->name, lib->func, 1);lua_pop(lua_state, 1);}luaL_dofile(lua_state, "hello.lua");lua_close(lua_state);
}

$ tree
.
├── hello.lua
├── lua
│ ├── include
│ │ ├── lapi.h
│ │ ├── lauxlib.h
│ │ ├── lcode.h
│ │ ├── lctype.h
│ │ ├── ldebug.h
│ │ ├── ldo.h
│ │ ├── lfunc.h
│ │ ├── lgc.h
│ │ ├── llex.h
│ │ ├── llimits.h
│ │ ├── lmem.h
│ │ ├── lobject.h
│ │ ├── lopcodes.h
│ │ ├── lparser.h
│ │ ├── lprefix.h
│ │ ├── lstate.h
│ │ ├── lstring.h
│ │ ├── ltable.h
│ │ ├── ltm.h
│ │ ├── luaconf.h
│ │ ├── lua.h
│ │ ├── lua.hpp
│ │ ├── lualib.h
│ │ ├── lundump.h
│ │ ├── lvm.h
│ │ └── lzio.h
│ └── lib
│ └── liblua.a
└── main.cpp

$ g++ -o main main.cpp -I./lua/include -L./lua/lib -llua
$ ./main
hello lua

4.lua调用c/c++

// hello.luaprint "hello lua"hellocpp()

// main.cpp
#include "stdio.h"
#include "lua.hpp"static int hellocpp(lua_State* luaEnv)
{printf("hello cpp");return 0;
}int main()
{lua_State *lua_state = luaL_newstate();static const luaL_Reg lualibs[] ={{ "base", luaopen_base},{ NULL, NULL}};const luaL_Reg *lib = lualibs;for(; lib->func != NULL; lib++){luaL_requiref(lua_state, lib->name, lib->func, 1);lua_pop(lua_state, 1);}luaL_openlibs(lua_state);lua_register(lua_state, "hellocpp", hellocpp);luaL_dofile(lua_state, "hello.lua");lua_close(lua_state);
}

$ g++ -o main main.cpp -I./lua/include -L./lua/lib -llua
$ ./main
hello lua
hello cpp


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033


Reference:
NULL


推荐阅读
author-avatar
JoanNewLife
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有