Невозможно динамически загрузить библиотеку в Lua с помощью package.loadlib - PullRequest
1 голос
/ 10 сентября 2011

Я пытаюсь создать библиотеку, которую можно загрузить в Lua с помощью require или package.loadlib, но до сих пор у меня не получилось. Сама библиотека находится на C ++, но, насколько я могу судить, я предпринял шаг, необходимый для правильного экспорта функции для загрузки библиотеки. В двух словах, это соответствующий раздел моего кода C / C ++:

extern "C"
{

// This line is copied from http://gcc.gnu.org/wiki/Visibility
// it's actually in a header, including it here for brevity
#define EXPORT __attribute__((visibility("default")))

EXPORT int luaopen_foo(lua_State* L)
{
    luaL_register(L, "Foo", fooL_table);
    return 0;
}

}

В моем скрипте Lua у меня есть это:

mylib = package.loadlib("libfoo.so", "luaopen_foo")
print(mylib) -- prints "nil"

Библиотека создается из Makefile, сгенерированного CMake, и в CMakeLists.txt я попытался скомпилировать с различными параметрами, такими как

add_library(foo STATIC ${foo_SOURCES})
add_library(foo MODULE ${foo_SOURCES})
add_library(foo SHARED ${foo_SOURCES})

И ни один из этих параметров не работает.

Есть ли какие-то шаги, которые я пропускаю, чтобы сделать эту работу? Мне трудно найти информацию о том, как сделать это правильно в Интернете, поэтому любые рекомендации приветствуются. Я использую это Ubuntu с GCC для компиляции.

1 Ответ

3 голосов
/ 10 сентября 2011

В руководстве по Lua говорится, что «libname должно быть полным именем файла библиотеки C, включая, при необходимости, путь и расширение». Ваш файл .so находится в этом каталоге с таким именем?

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