分为linux下和windows平台下:

前置工作,准备好lua安装包。

方法一(linux):

依次使用以下命令
得到安装包:
wget http://www.lua.org/ftp/lua-5.2.0.tar.gz
解压缩:
tar zxf lua-5.2.0.tar.gz
进入安装包
cd lua-5.2.0
make linux
make install

如遇到readline相关问题
apt-get install libreadline-dev

方法二(windows):

在这个网址下载好lua安装包。
http://www.lua.org/download.html
windows下需要做一些配置,用于链接静态库或动态库,所以不能光下载安装包
可在以下网站下载,提取处lib 和 include 文件夹。
https://github.com/rjpcomputing/luaforwindows githuab

我自己已经把这些需要的工具都下载好了
lua安装包以及lib库,include头文件都在这。
链接:https://pan.baidu.com/s/1uxpheOsYiqnbMdBO2hCXzA?pwd=h588
提取码:h588

测试代码

需要一个.lua文件,一个c或者cpp文件

hello.lua

str = "i am so cool"
tbl = {name = "shun", id = 2020104}
function add(a, b)return a + b
end
print("nihao")

test.cpp

#include <iostream>
#include <string.h>
#include <lua.hpp>
using namespace std;int main() {lua_State* L = luaL_newstate(); //lua_open();luaL_openlibs(L);   //必不可少//加载lua文件int bRet = luaL_loadfile(L, "hello.lua");if (bRet) {cout << "load file error" << endl;return  0;}//运行lua文件bRet = lua_pcall(L, 0, 0, 0);if (bRet) {cout << "pcall error" << endl;return  0;}//读取变量lua_getglobal(L, "str");string str = lua_tostring(L, -1);cout << "str = " << str.c_str() << endl; // str =  I am so cool//读取tablelua_getglobal(L, "tbl");lua_getfield(L, -1, "name");str = lua_tostring(L, -1);cout << "tbl:name = " << str.c_str() << endl;//读取函数lua_getglobal(L, "add");lua_pushnumber(L, 10); //压入第一个参数lua_pushnumber(L, 20); //压入第二个参数int iRet = lua_pcall(L, 2, 1, 0); //调用参数, 调用完以后,会将值压入栈中// 2表示参数个数, 1表示返回结果个数,返回的结果会压入栈中if (iRet) {const char* pErrorMsg = lua_tostring(L, -1);cout << pErrorMsg << endl;lua_close(L);return  0;}if (lua_isnumber(L, -1)) {//取值输出double fValue = lua_tonumber(L, -1);cout << "Result is " << fValue << endl;}return 1;
}

Linux下比较简单:

完成以上方法一的配置后
将以上的hello.lua 和 test.cpp放在一个目录下,直接使用命令
g++ test.cpp -llua -ldl -o test
运行
./test 即可看到效果。

Windows下:

我使用的vs2019
创建一个windows桌面向导下的控制台程序工程,将hello.lua, test.cpp, 都加入这个功能,当然lib和include也可以放进来(不是必须的,后边使用它们的时候只需要得到它们路径即可)
1:将刚才下载的include文件的路径放到红框里

2:将刚才下载的lib目录放进去

3:在这里写入lib库文件的名字,名字自己在lib文件里找,这里是lua5.1.lib
当然,这步不是必须的,你也可以直接在代码编辑区写上

#pragma comment(lib,"lua5.1.lib")  //一样的效果。


如果使用的是静态库方法到此为止就可以了,但以上的测试用到了动态库,如果你直接运行它会告诉你找不到…dll文件,这时在lib文件中找到lua5.1.dll ,复制一份到当前工程这一层级下(打开工程目录的那一层级),到此为止,即可运行。

这里只是 C/C++ 调用lua,去这一篇学习lua调用C/C++(点我)
若有疑问,欢迎评论区留言讨论~

C/C++ 如何调用Lua脚本,Windows以及Linux版本演示相关推荐

  1. Lua脚本如何调用C/C++模块,Windows以及Linux版本演示

    Windows下 我用的是vs2019,由于Windows下不像Linux可以直接直接安装lua程序直接运行lua代码,所以这里我们演示的是,通过c/c++调用lua脚本,lua脚本再调用其他的C/C ...

  2. 【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )

    文章目录 前言 一.Linux 中调用 Groovy 脚本 二.Windows 中调用 Groovy 脚本 前言 在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以 ...

  3. Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

    Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...

  4. 详解C调用lua脚本效率测试

    详解C调用lua脚本效率测试 C调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率.结论是不要频繁地穿越C/Lua边界. #include  ...

  5. 记录一次rediscluster 调用lua 脚本, 用于 list 批量获取

    记录一次rediscluster 调用lua 脚本 用于 list 批量获取 需求:用redis list 当作消息队列(原来的流程固定不能变更),需要增加消费速度 改进方案的思想(不考虑业务逻辑变更 ...

  6. redis调用lua脚本注意事项

    使用脚本的好处: 减少网络开销.可以将多个请求通过脚本的形式一次发送,减少网络时延 原子操作.redis会将整个脚本作为一个整体执行,中间不会被其他命令插入.因此在编写脚本的过程中无需担心会出现竞态条 ...

  7. matlab R2010a windows和linux版本下载地址

    matlab R2010a windows和linux版本下载地址: win:ed2k://|file|[%E7%9F%A9%E9%98%B5%E5%AE%9E%E9%AA%8C%E5%AE%A4]. ...

  8. 超详细anaconda安装教程(Mac,Windows,Linux版本)

    超详细anaconda安装教程(Mac,Windows,Linux版本) Windows系统安装Anaconda macOS系统安装Anaconda Linux系统安装Anaconda Windows ...

  9. Java调用Lua脚本(热载实现)

    前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...

最新文章

  1. AutoConfig工具使用
  2. 更改Webshpere的profile端口及删除profile
  3. 给批量用户设磁盘配额
  4. java仿qq gui_Java仿QQ登入页面
  5. 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
  6. opencv 打印文字_如何使用OpenCV+Python去除手机拍摄文本底色
  7. win7虚拟机_UTM 虚拟机不越狱运行 win7,百分百可以
  8. 手机电视重蹈IPTV覆辙 广电电信争持催生融合标准
  9. Verbatim字符串
  10. NSSCTF部分复现
  11. 记一次微信小程序云函数操作Mysql数据库
  12. jadx-gui 重命名功能
  13. loadrunner11免费下载地址
  14. Streaming System 第一章:Streaming 101
  15. 数据泄露是如何发生的?有哪些预防措施...
  16. 算法竞赛进阶指南0x10练习7:Corral the Cows
  17. GD32F4(5):GD32F450时钟配置为200M过程分析
  18. 一个外国孩子眼中的《新华字典》
  19. 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)...
  20. 车路协同趋势下车载终端的技术和产品形态演进

热门文章

  1. oracle-12514,Oracle错误 ORA-12514 解决方法
  2. 【实用】找实习找工作的看过来!法国大大小小招聘网站都在这儿
  3. 3、Nginx系列之: location和alias的区别
  4. 关于Google账号被封、被下架、提审被拒等原因分析及建议
  5. 什么是时间序列数据?
  6. 信号(进程间的通信方式)
  7. 安装的计算机语言不受支持,win10提示安装程序包的语言不受系统支持解决方案...
  8. 浅谈char类型范围
  9. 【深度学习】Hinton 最新研究:神经网络的未来是前向-前向算法
  10. sqlserver批量(部分)导出一张表中的数据