C/C++ 如何调用Lua脚本,Windows以及Linux版本演示
分为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版本演示相关推荐
- Lua脚本如何调用C/C++模块,Windows以及Linux版本演示
Windows下 我用的是vs2019,由于Windows下不像Linux可以直接直接安装lua程序直接运行lua代码,所以这里我们演示的是,通过c/c++调用lua脚本,lua脚本再调用其他的C/C ...
- 【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )
文章目录 前言 一.Linux 中调用 Groovy 脚本 二.Windows 中调用 Groovy 脚本 前言 在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以 ...
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...
- 详解C调用lua脚本效率测试
详解C调用lua脚本效率测试 C调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率.结论是不要频繁地穿越C/Lua边界. #include ...
- 记录一次rediscluster 调用lua 脚本, 用于 list 批量获取
记录一次rediscluster 调用lua 脚本 用于 list 批量获取 需求:用redis list 当作消息队列(原来的流程固定不能变更),需要增加消费速度 改进方案的思想(不考虑业务逻辑变更 ...
- redis调用lua脚本注意事项
使用脚本的好处: 减少网络开销.可以将多个请求通过脚本的形式一次发送,减少网络时延 原子操作.redis会将整个脚本作为一个整体执行,中间不会被其他命令插入.因此在编写脚本的过程中无需担心会出现竞态条 ...
- 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]. ...
- 超详细anaconda安装教程(Mac,Windows,Linux版本)
超详细anaconda安装教程(Mac,Windows,Linux版本) Windows系统安装Anaconda macOS系统安装Anaconda Linux系统安装Anaconda Windows ...
- Java调用Lua脚本(热载实现)
前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...
最新文章
- AutoConfig工具使用
- 更改Webshpere的profile端口及删除profile
- 给批量用户设磁盘配额
- java仿qq gui_Java仿QQ登入页面
- 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
- opencv 打印文字_如何使用OpenCV+Python去除手机拍摄文本底色
- win7虚拟机_UTM 虚拟机不越狱运行 win7,百分百可以
- 手机电视重蹈IPTV覆辙 广电电信争持催生融合标准
- Verbatim字符串
- NSSCTF部分复现
- 记一次微信小程序云函数操作Mysql数据库
- jadx-gui 重命名功能
- loadrunner11免费下载地址
- Streaming System 第一章:Streaming 101
- 数据泄露是如何发生的?有哪些预防措施...
- 算法竞赛进阶指南0x10练习7:Corral the Cows
- GD32F4(5):GD32F450时钟配置为200M过程分析
- 一个外国孩子眼中的《新华字典》
- 【项目实战】——Java根据奖品权重计算中奖概率实现抽奖(适用于砸金蛋、大转盘等抽奖活动)...
- 车路协同趋势下车载终端的技术和产品形态演进
热门文章
- oracle-12514,Oracle错误 ORA-12514 解决方法
- 【实用】找实习找工作的看过来!法国大大小小招聘网站都在这儿
- 3、Nginx系列之: location和alias的区别
- 关于Google账号被封、被下架、提审被拒等原因分析及建议
- 什么是时间序列数据?
- 信号(进程间的通信方式)
- 安装的计算机语言不受支持,win10提示安装程序包的语言不受系统支持解决方案...
- 浅谈char类型范围
- 【深度学习】Hinton 最新研究:神经网络的未来是前向-前向算法
- sqlserver批量(部分)导出一张表中的数据