Luajit segfault при загрузке модуля

В настоящее время у меня есть проблема, когда Lua5.1/Lua5.2 может загружать и использовать модуль, а LuaJIT не может. Это странно, поскольку LuaJIT должен быть ABI-совместим с Lua, верно?

Как я могу это исправить?

Модуль: https://github.com/gabrield/v4l-lua


person max1220    schedule 23.07.2015    source источник
comment
Можете ли вы показать нам след от сбоя и любые сообщения об ошибках, которые сопровождают его?   -  person Etan Reisner    schedule 23.07.2015
comment
@ max1220: Вы используете Makefile из репозитория? Если это так, вы можете попробовать удалить -llua5.1 из командной строки компиляции.   -  person siffiejoe    schedule 23.07.2015
comment
Какую библиотеку Lua вы связали со своим модулем? Интерпретатор и модуль должны использовать внутри одни и те же функции Lua C API.   -  person Youka    schedule 24.07.2015
comment
@EtanReisner: я бы хотел: pastebin.com. Хотя я не думаю, что это полезно.   -  person max1220    schedule 24.07.2015
comment
@siffiejoe: Да, я создаю его с помощью make-файла. Но даже при ручной сборке с использованием gcc -Wall -pedantic -fPIC v4l_lua.c core.c -shared -o v4l2.so -I /usr/include/lua5.1/ -lv4lconvert я все равно получаю ту же ошибку.   -  person max1220    schedule 24.07.2015
comment
@Youka: Lua5.1, как вы можете видеть выше. Однако он должен быть совместим с ABI с LuaJIT.   -  person max1220    schedule 24.07.2015
comment
Для не немцев: его сообщение об ошибке просто говорит о нарушении доступа к памяти - и все. Это означает, что файл библиотеки найден, функция входа luaopen_v4l доступна... и затем sth. ужасное бывает. Что меня смущает, так это то, как lua_settable используется в C .   -  person Youka    schedule 24.07.2015
comment
@ max1220: Вызов lua_settable сам по себе правильный - он просто делает что-то странное и бесполезное - но он делает следующий return 1 неверным, потому что в стеке Lua не осталось ничего, что можно было бы вернуть. Это может просто вызвать SIGSEGV, который вы испытываете, поэтому вам следует удалить его (или, альтернативно, изменить return 1 на return 0).   -  person siffiejoe    schedule 24.07.2015
comment
Это просто ошибка, а не откат. Обратная трассировка будет более полезной.   -  person Etan Reisner    schedule 24.07.2015
comment
Этот вызов lua_settable неверен. В стеке недостаточно вещей, чтобы он работал правильно. Он извлекает два элемента, но нуждается в другом для их установки (если только он не определен правильно для работы сам по себе).   -  person Etan Reisner    schedule 24.07.2015


Ответы (1)


Я решил это, просто удалив устанавливаемую строку в v4l_lua.c (строка). Спасибо @Youka, @siffiejoe и @Etan-Reisner за предложение!

Интересно, почему Lua загрузил модуль даже без предупреждения (и чтобы он работал!)

person max1220    schedule 24.07.2015