undefined symbol: lua_pcall
时间: 2023-12-09 14:05:26 浏览: 314
在引用中提到,当使用lua 5.1编译lua-cjson-2.1.0时,会出现undefined symbol :lua_pcall的错误。这个错误的原因可能是因为在编译过程中找不到lua_pcall函数的定义。为了解决这个问题,可以尝试重新安装lua 5.2.3,将其覆盖掉lua 5.1的版本,然后重新编译lua-cjson-2.1.0。这样应该能解决undefined symbol: lua_pcall的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
相关问题
lua_pcall 、 lua_cpcall 函数参数解释
`lua_pcall` 和 `lua_cpcall` 都是 Lua 自带的 C API 中用于调用 Lua 脚本函数的重要函数。它们的区别在于处理错误的方式:
1. **lua_pcall**: 这个函数是标准的异步调用方式,当遇到错误时,它会立即返回错误码,不会阻塞外部程序。它的原型如下:
```c
int lua_pcall(lua_State *L, int narg, int nresults, int errfunc);
```
参数解释:
- `L`: 当前的 Lua 环境(状态机)。
- `narg`: 要传递给脚本的参数个数。
- `nresults`: 预期的结果堆栈元素的数量。
- `errfunc`: 如果发生错误,将被调用的错误处理函数索引,0 表示默认错误处理。
2. **lua_cpcall**: 这是一个同步版本的调用,它会在调用结束并且没有错误发生时才会返回。如果遇到错误,它会调用用户提供的回调函数,并继续执行,直到完成或再次遇到错误。其原型类似:
```c
int lua_cpcall(lua_State *L, lua_CFunction func, lua_State *LUA, int narg);
```
新增的参数:
- `func`: 用户提供的回调函数,当 `lua_pcall` 需要暂停时调用。
- `LUA`: 另一个 Lua 状态机,用于保存调用过程中的上下文。
阅读全文