热门标签 | 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


推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • 在 CentOS 6.6 系统中搭建 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的运行环境配置指南
    本文提供了在 CentOS 6.6 系统上配置 MONO 和 Jexus 以支持 ASP.NET 及 MVC 应用的详细步骤。首先,确保本机环境为 CentOS 6.6,并使用阿里云的 YUM 源来安装必要的软件包,包括 gcc、gcc-c++、bison、pkgconfig 和 glib2-devel。这些软件包是构建和运行 MONO 环境的基础,确保系统能够顺利支持 ASP.NET 和 MVC 应用的部署和运行。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 【线段树】  本质是二叉树,每个节点表示一个区间[L,R],设m(R-L+1)2(该处结果向下取整)左孩子区间为[L,m],右孩子区间为[m ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
author-avatar
敏捷的敏2502921017
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有