无法使用package.loadlib在Lua中动态加载库

时间:2011-09-10 04:46:08

标签: c++ c binding lua

我正在尝试创建一个可以使用requirepackage.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进行编译。

1 个答案:

答案 0 :(得分:3)

在Lua手册中,它说,“libname必须是C库的完整文件名,包括必要时的路径和扩展名。”你的.so文件是否在该目录中,具有该名称?