设备: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
实操一下:目录结构&编译&运行

如果报这个错误:
➜ 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