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

    //读取table
    lua_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++(点我)
若有疑问,欢迎评论区留言讨论~

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值