我正在尝试创建一个可以使用require
或package.loadlib
加载到Lua中的库,但到目前为止我还没有成功。库本身是用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"
库是从CMake生成的Makefile创建的,在CMakeLists.txt中我尝试使用各种选项进行编译,例如
add_library(foo STATIC ${foo_SOURCES})
add_library(foo MODULE ${foo_SOURCES})
add_library(foo SHARED ${foo_SOURCES})
这些选项似乎都不起作用。
我是否缺少任何让这项工作的步骤?我很难在线查找如何正确操作的信息,因此欢迎任何指导。我正在使用的是Ubuntu和gcc进行编译。
答案 0 :(得分:3)
在Lua手册中,它说,“libname
必须是C库的完整文件名,包括必要时的路径和扩展名。”你的.so文件是否在该目录中,具有该名称?