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

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

Сейчас я пишу новую библиотеку c ++, которая должна вызываться из этого скрипта 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 ++ необычно прерывается.

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

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

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

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

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

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

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

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

1

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]