Skip to content
铜雀台

铜雀台

Take time for yourself

  • 首页
  • Linux基础
  • 性能分析
  • 树莓派
  • Lua&Go
  • 关于本站
  • Toggle search form

写一个C++程序调用lua脚本

Posted on 12月 3, 2023 By admin 写一个C++程序调用lua脚本有1条评论

设备:orangepi

系统:Linux orangepi3-lts 5.16.17-sun50iw6 #3.0.8

下载安装lua库

官网链接:https://www.lua.org/download.html

curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make all test

实操一下:自动将lua库/头文件安装到了系统目录。

写一个C++程序

这里我是让ChatGPT帮我写的:加载一个名字叫做sum.lua的文件,执行里面的函数 sum()

#include <iostream>
extern "C" {
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}

int main() {
    // 创建一个新的Lua状态
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    // 加载并运行Lua脚本文件
    if (luaL_dofile(L, "sum.lua") != LUA_OK) {
        std::cerr << "Error loading script: " << lua_tostring(L, -1) << std::endl;
        lua_close(L);
        return 1;
    }

    // 将函数sum压入栈
    lua_getglobal(L, "sum");

    // 压入参数
    lua_pushinteger(L, 3);
    lua_pushinteger(L, 4);

    // 调用Lua函数,传入2个参数,返回1个结果
    if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
        std::cerr << "Error calling function: " << lua_tostring(L, -1) << std::endl;
        lua_close(L);
        return 1;
    }

    // 获取返回值并打印
    int result = lua_tointeger(L, -1);
    std::cout << "Result: " << result << std::endl;

    // 关闭Lua状态
    lua_close(L);
    return 0;
}

再准备一个lua文件, sum.lua

-- sum.lua
function sum(a, b)
    return a + b
end

实操一下:目录结构&编译&运行

Lua&Go

文章导航

Previous Post: Go的手动编译

Comment (1) on “写一个C++程序调用lua脚本”

  1. admin说道:
    12月 14, 2023 11:59 上午

    如果报这个错误:
    ➜ test git:(ham_feat) ✗ g++ call_lua.cpp -o call_lua -I/usr/local/include -L/usr/local/lib -llua
    /usr/local/lib/liblua.a(loadlib.o):在函数‘lookforfunc’中:
    loadlib.c:(.text+0x4f2):对‘dlsym’未定义的引用
    loadlib.c:(.text+0x556):对‘dlopen’未定义的引用
    loadlib.c:(.text+0x5d1):对‘dlerror’未定义的引用
    loadlib.c:(.text+0x5eb):对‘dlerror’未定义的引用
    /usr/local/lib/liblua.a(loadlib.o):在函数‘gctm’中:
    loadlib.c:(.text+0x6e1):对‘dlclose’未定义的引用
    collect2: 错误:ld 返回 1

    再补一个动态链接库
    g++ call_lua.cpp -o call_lua -I/usr/local/include -L/usr/local/lib -llua -ldl

    回复

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我

作者:Ham

地址:深圳     

邮件:liuluqqzj@qq.com

关于本站

温故而知新,

Copyright © 2025 铜雀台.

    粤ICP备2021168298号