simple
无法加载、解析或执行。要查找问题,请使用luaL_loadfile
代替luaL_dofile
并检查返回值。如果非零,则存在加载错误,您可以从 Lua 堆栈中弹出并打印。如果没有错误,则lua_pcall(L, 0, LUA_MULTRET, 0))
运行由 loadfile 创建的卡盘,并再次检查返回码是否有错误,弹出堆栈并打印。它会是这样的:
int main ()
{
L = luaL_newstate();
luaL_openlibs(L);
if (luaL_loadfile(L, "test.lua"))
{
cout << "Error: " << lua_tostring(L, -1) << endl;
}
else if (lua_pcall(L, 0, LUA_MULTRET, 0))
{
cout << "Error: " << lua_tostring(L, -1) << endl;
}
else
{
// call successful
}
lua_close(L);
return 0;
}
更新:现在您从错误消息中知道 simple.so 具有未定义符号:lua_gettop
,您知道存在链接错误。也许simple.so
没有链接到lua51.so
,但由于它可以从链接到 lua lib 的 lua.exe 运行,因此它可以在您的应用程序中运行,这肯定也链接到它。另一种可能性是 lua.exe 是静态链接的,但 simple.so 没有链接。验证simple.so
链接到 lua51.so 并且可以找到它链接到的库,例如 via LD_LIBRARY_PATH
。验证 lua.exe 是否链接到相同的 .so。