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


推荐阅读
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Colbie Caillat 的经典歌词解析与赏析
    Colbie Caillat 的经典歌词《Bubbly》不仅旋律优美,歌词也充满深意。通过解析其歌词,我们可以发现她巧妙地运用了日常生活中的细节,如“Put your makeup on, Get your nails done, Curl your hair, Run the extra mile”等,来表达对美好生活的向往和追求。这些细腻的描绘不仅展现了她独特的创作风格,也让听众在音乐中找到了共鸣。 ... [详细]
  • 在Ubuntu 20.04 Linux系统中部署Git的详细步骤与最佳实践
    在Ubuntu 20.04 Linux系统中部署Git时,首先确保您的操作系统版本正确,并已以具备sudo权限的用户身份登录。推荐使用APT软件包管理器进行安装,这是最简便且可靠的方法。此外,遵循最佳实践,如定期更新Git版本和配置全局设置,可以进一步提升使用体验和安全性。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
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社区 版权所有