lua加载我的c++共享库但是它的依赖共享库没有被加载

我有一个c++(旧版)应用程序,它调用一些lua脚本用于一些功能。

现在我正在编写一个新的c++库,应该从那个lua脚本中调用它。

#include <lua.hpp>

extern "C" {

static int isquare(lua_State *L){              /* 函数的内部名称 */
        return 1;                              /* 一个返回值 */
}
static int icube(lua_State *L){                /* 函数的内部名称 */
        return 1;                              /* 一个返回值 */
}

/* 在luaopen_libraryname()函数中注册该文件的函数,其中libraryname是编译后的 .so 文件的名称。换句话说,libraryname 是 cc 命令中 -o 后面的文件名(但不包括扩展名)。例如,如果你的 cc 命令中有 -o power.so,那么该函数将被称为 luaopen_power()。这个函数应该包含每个你想从Lua中使用的函数的 lua_register() 命令。
*/
int luaopen_power(lua_State *L){
        printf("before power open");
        lua_register(
                        L,               /* Lua状态变量 */
                        "square",        /* 在Lua中已知的函数名称 */
                        isquare          /* 在该文件中的函数名称 */
                        );

        lua_register(L,"cube",icube);
        printf("after power register");
        return 0;
}
}

g++ -Wall -shared -fPIC -o power.so -I/usr/include/lua5.1  hellofunc.cpp -lstdc++

我没有为链接指定任何 lua5.1 的 so 文件。

但是,这个 power.so 在运行时需要 lua-5.1.so。

现在,我有一个 C++ 旧版应用程序,其中已经编译了 lua52。

它调用 alert.lua 用于一些工作。

package.cpath = package.cpath .. ";/usr/lib64/power.so"
package.cpath = package.cpath .. ";/usr/lib64/liblua-5.1.so"
require("power")

注意:加载 power.so 的 lua 运行在 lua5.2 上

Power.so 已经编译并且依赖于 lua5.1

我遇到了一个错误

 undefined symbol: lua_setfield'

这些版本是否必须相同?

有人能够解决这个问题吗?

编辑:如果我使用 lua52.so 编译 power.so,那么 lua 脚本和 C++ 应用程序会异常中止。

如果我在构建 power.so 时不指定 -llua52,则在运行时会出现一个未定义的符号错误。

编辑:更多说明:

有一个 C++ 应用程序 .exe。(samplecpp) 还有一个.dll/.sh,它是与 lua 5.2 库一起构建的,因此具有 lua 和其他功能。(luaplugin.so)

这个 luaplugin.so 可以调用任何已配置的 lua 脚本。它调用并执行 lua 脚本中的函数。

现在我有一个 lua 脚本,我想连接到不同的 c++ 模块。

我正在编写的 c++ 模块(使用 lua52.so 的依赖项构建为 .so)使用 lua 函数进行注册等。因为它必须从 lua 脚本中加载。

但是,在运行时,当 samplecpp 执行 lua 脚本并且当 luascript 需要 c++ .so 时,我在使用 c++ .so 中使用的 lua 函数上遇到了无法解决的错误。

我如何让它引用在 samplecpp 中可用的 lua 函数?

点赞
用户107090
用户107090

是的,你需要使用为与 Lua 相同版本编译的 C/C++ 库。

不同版本的 Lua 之间不存在 ABI 兼容性。

请见http://www.lua.org/versions.html#numbering

2017-10-26 11:29:36