Лучший способ для Lua-скрипта вызвать общую библиотеку C? - PullRequest
5 голосов
/ 12 ноября 2010

Я родом из Python и CTYPES ... и пытаюсь найти лучший способ вызвать стандартную общую библиотеку C из скрипта Lua.

Я слышал о "Чужом" (http://alien.luaforge.net/), но я не уверен, насколько он актуален? Это означает, что он регулярно обновляется?

Например, я знаю, что это библиотека SQLite Lua, но, скажем, я хотел вызвать созданную разделяемую библиотеку SQLite.когда я компилирую SQLIte?

Так, например: В моем случае библиотека находится в /usr/local/lib/libsqlite3.so

Если я пишу небольшой фиктивный скрипт, просто чтобы посмотреть, если онмогу загрузить библиотеку

require "libsqlite3"

print "hello"

Я получаю следующую ошибку:

debian@debian:~/Desktop/SQLite Test$ lua sqlite_test.lua
lua: error loading module 'libsqlite3' from file '/usr/local/lib/lua/5.2/libsqlite3.so':
    /usr/local/lib/lua/5.2/libsqlite3.so: undefined symbol: luaopen_libsqlite3
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    sqlite_test.lua:1: in main chunk
    [C]: in ?
debian@debian:~/Desktop/SQLite Test$ 

Означает ли это, что Lua не может вызывать совместно используемых библиотек "из коробки" и что я ДОЛЖЕН использовать что-то вродеЧужой?

Я знаю, что могу также кодировать общую библиотеку таким образом, чтобы она включала файлы заголовков Lua, и я мог создавать "функции Lua" ... Я просто надеялся Iможет вызвать общие библиотеки, которые являются "стандартными" на коробке.

И помощь или объявлениеТиски будут с благодарностью; -)

Спасибо

Линтон

Ответы [ 2 ]

4 голосов
/ 12 ноября 2010

Как сказал Янн, Lua не может вызывать библиотеки C по умолчанию.Обычной практикой является предоставление нужного API посредством создания библиотеки привязок.Есть несколько мест, где вы можете найти существующие библиотечные привязки для Lua, например вики , LuaRocks или LuaDist .

Если нетпривязки существуют, вы можете попытаться использовать Alien для прямой привязки к библиотекам C с использованием libffi.

Для вашего примера - Sqlite3, существует как минимум 2 привязки:

  • универсальная привязка SQL - LuaSql , обеспечивает привязку к Sqlite3, MySQL, Oracle ...
  • специализированная привязка - Lua-Sqlite3
4 голосов
/ 12 ноября 2010

Lua не может вызывать библиотеки C из коробки.Он не поставляется с libffi, и поэтому не работает как ctypes.

Исторически lua встроен в приложение, которое, в свою очередь, добавит в таблицы lua необходимые функции и обеспечит манипулирование стеком luaпередать и вернуть параметры.

Alien - это адаптация libffi и будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...