lua загружает мою общую библиотеку С++, но не ее зависимые общие библиотеки

У меня есть приложение С++ (устаревшее), которое вызывает некоторые сценарии lua для некоторых функций.

Теперь я пишу новую библиотеку С++, которая должна вызываться из этого сценария lua.

#include <lua.hpp>

extern "C" {

static int isquare(lua_State *L){              /* Internal name of func */
        return 1;                              /* One return value */
}
static int icube(lua_State *L){                /* Internal name of func */
        return 1;                              /* One return value */
}


/* Register this file's functions with the
 * luaopen_libraryname() function, where libraryname
 * is the name of the compiled .so output. In other words
 * it's the filename (but not extension) after the -o
 * in the cc command.
 *
 * So for instance, if your cc command has -o power.so then
 * this function would be called luaopen_power().
 *
 * This function should contain lua_register() commands for
 * each function you want available from Lua.
 *
*/
int luaopen_power(lua_State *L){
        printf("before power open");
        lua_register(
                        L,               /* Lua state variable */
                        "square",        /* func name as known in Lua */
                        isquare          /* func name in this file */
                        );

        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 для ссылки.

но для этого 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")

Примечание: lua, загружающий power.so, работает на lua5.2.

Power.so компилируется и зависит от lua5.1

И я получаю ошибку

 undefined symbol: lua_setfield'

Должны ли эти версии быть одинаковыми?

Может ли кто-нибудь пролить свет на этот вопрос?

РЕДАКТИРОВАТЬ: Если я скомпилирую power.so с lua52.so, то сценарий lua и приложение C++ аварийно завершат работу.

Если не упоминать -llua52 при сборке power.so, то во время выполнения возникает ошибка с указанием неопределенного символа.

РЕДАКТИРОВАТЬ: Дополнительное объяснение:

Есть приложение C++ .exe. (samplecpp) Существует также .dll/.sh, который создается вместе с библиотекой lua 5.2, следовательно, имеет lua, а также другие функции. (luaplugin.so)

Этот luaplugin.so может вызывать любой настроенный lua-скрипт. Он вызывает и выполняет функции в сценарии lua.

Теперь у меня есть сценарий lua, который я хочу подключить к другому модулю С++.

Модуль С++ (сборка в .so с зависимостью от lua52.so), который я пишу, в свою очередь использует функции lua для регистрации и т. д. Поскольку он должен быть загружен из сценария lua.

Но во время выполнения, когда samplecpp выполняет сценарий lua и когда luascript требует C++ .so, я получаю неразрешенную ошибку в функциях lua, которые используются в C++ .so.

Как я могу заставить его ссылаться на функции lua, которые доступны в самом samplecpp?


person Deepak Selvakumar    schedule 26.10.2017    source источник


Ответы (1)


Да, вам нужно использовать библиотеки C/C++, скомпилированные для той же версии Lua.

Между различными версиями Lua нет совместимости ABI.
См. http://www.lua.org/versions.html#numbering

person lhf    schedule 26.10.2017