Lua库liblua5.1.so无法打开共享对象文件。

我有一个编译成.so格式的C文件,正在尝试从Lua中使用它。这两个文件的代码如下:

require("power")

print("Enter a number: ")
local num = tonumber(io.read())

local n = create(num)
square(n)
cube(n)
nprint(n)

// luatest.c compiled to power.so

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#include <stdlib.h>

static int createStruct(lua_State *L);
static int isquare(lua_State *L);
static int icube(lua_State *L);
static int nprint(lua_State *L);

typedef struct numbers {
    float number;
    float square;
    float cube;
} numbers;

int luaopen_power(lua_State *L){
    lua_register(L, "create", createStruct);
    lua_register(L, "square", isquare);
    lua_register(L,"cube",icube);
    lua_register(L, "nprint", nprint);
    return 0;
}

static int createStruct(lua_State *L){
    // Code here
}

static int isquare(lua_State *L){
    // Code here
}

static int icube(lua_State *L){
    // Code here
}

static int nprint(lua_State *L){
    // Code here
}

C代码编译得很好。但是当我尝试执行以下操作时:

cd <directory>
lua luatest.lua

我得到以下错误:

lua:无法从文件'./power.so'加载模块'power':
liblua5.1.so:无法打开共享对象文件:没有该文件或目录
堆栈回溯:
[C]:?
[C]:在函数'require'中
luatest.lua:3:在主块中
[C]:?

我不知道出了什么问题,因为./power.so应该存在。

我在openSUSE 64位上遇到了这个错误,但是在OSX上,这段代码正常工作。

对此的任何见解都将是巨大的帮助,我似乎找不到任何其他人都遇到了这个问题。

原文链接 https://stackoverflow.com/questions/8875149

点赞
stackoverflow用户1113772
stackoverflow用户1113772

我正在使用带有-l[1]标志的gcc编译lua5.1。如果删除此标志,则它将正常工作!

-l库 在链接时搜索名为库的库。

gcc -Wall -fPIC -shared -o <输出文件名> -I<lua包含目录的路径> <输入文件名>
2013-01-16 01:55:26