我正在尝试创建一个从lua脚本调用的C模块。我正在使用debian Linux。我正在使用mysql-proxy和lua 5.2。我已经创建了一些示例函数(从教程中复制)来调用。

加载程序的定义如下:

int luaopen_luacall(lua_State* l)
{

    luaL_newlibtable(l, luacall);
    luaL_setfuncs(l, luacall, 0);
    return 1;
}

要从lua调用此代码,请使用以下代码:

luacall = require("luacall")
local f = luacall.fun1()

我用以下命令编译了它:

g++ -shared -Wl,-E,-soname,libluacall.so -o luacall.so luacall.c  -fPIC -llua -ldl

当我尝试运行脚本时,在require命令上收到以下错误:

 error loading module 'luacall' from file '/usr/lib/mysql-proxy/lua/luacall.so':
        /usr/lib/mysql-proxy/lua/luacall.so: undefined symbol: luaL_setfuncs

我对自己做错的事真的迷失了。

最佳答案

构建Lua模块时,切勿使用-llua。 Lua解释器本身已经与liblua链接,并在模块加载时满足这些符号。将您的模块链接到liblua与解释器冲突。

关于c - 加载模块 undefined symbol 时出错:luaL_setfuncs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21307312/

10-11 06:46