luasocket 3.0,未定义的符号:lua_callk。

我正在使用 luajit 2.0.3,想在我的项目中使用 luasocket。但是在 jit 环境下 require socket 时,它报了一个错误。

"error loading module 'socket.core' from file '/usr/local/lib/lua/5.1/socket/core.so': /usr/local/lib/lua/5.1/socket/core.so: undefined symbol: lua_callk.

我在 debian 5.0 中用 lua5.1 编译了 luasocket 3.0。我搜索了很多答案,但没有一个有用。我在 debian 5.0 中用 lua5.1 编译了 luasocket 3.0

点赞
用户134758
用户134758

LuaJIT 兼容 Lua 5.1 的 ABI,这意味着你可以使用标准的 Lua 头文件编译 C 模块,然后从 Lua 或者 LuaJIT 中加载。

根据错误信息来看,LuaSocket 需要 lua_callk 函数,但是到目前为止,LuaJIT 尚未实现这个函数。一些人提出了实现此函数、lua_pcallklua_yieldk 的请求,但这样做需要 LuaJIT 切换至 Lua 5.2 的 ABI [1]。

我建议你切换至较旧版本的 LuaSocket(例如 2.0.2),或者检查是否可以在保持 5.1 ABI 兼容性的情况下编译 LuaSocket。

[1] http://www.freelists.org/post/luajit/Yielding-across-C-boundaries,3

2015-11-06 00:42:55