добрый день!
У меня есть маленький вопрос о перезагрузке модуля C в Tarantool
например: у меня есть модуль c, который предоставляет метод:
int calculate(lua_State* L);
Кроме того, я объявил точку входа:
extern "C"
{
LUA_API int luaopen_cuendemodule(lua_State *L);
}
Теперь я загружаю этот модуль ("testmodule.so") в tarantool:
require('testmodule')
box.schema.func.create('testmodule.calculate')
box.schema.user.grant('user', 'execute', 'function', 'testmodule.calculate')
и теперь я вызываю этот метод из моего клиента c #:
await tarantoolClient.Call<TarantoolTuple<CalculateParameters>, CalculationResults>("testmodule.calculate", TarantoolTuple.Create(....));
и все работает как ожидалось - метод расчета выполнен и результаты возвращены
но если я хочу еще обновить мой модуль, то начинаются проблемы: после того, как я заменил файл и вызвал метод вычисления, мой tarantool перезапустился, и я могу увидеть что-то вроде "tarntool invalid opcode в testmodule.so" в dmesg
после прочтения документации я вижу дополнительные параметры в определении функции, например:
box.schema.func.create('testmodule.calculate', {language = 'C'})
но после этого, если я вызываю его из c #, я получаю исключение с сообщением "не удалось динамически загрузить функцию, вычисление неопределенного символа"
я использую tarantool 1.7 в Ubuntu
мой так скомпилирован с gcc 8.1.0