所以我有一个编译过的.So格式的C文件,并试图在Lua中使用它这两个文件的代码是:

-- luatest.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: error loading module 'power' from file './power.so':
liblua5.1.so: cannot open shared object file: No such file or directory
stack traceback:
[C]: ?
[C]: in function 'require'
luatest.lua:3: in main chunk
[C]: ?

我不确定什么是错的./POWER。所以应该存在。
我在opensuse64位上得到了这个错误,但是这个精确的代码在OSX上运行得很好。
对这个问题的任何洞察都会很好,我在任何地方都找不到其他有这个问题的人。

最佳答案

我是用gcc编译它的,在lua5.1处有-l[1]标志把这个拿开就行了!
-图书馆
链接时搜索名为library的库

gcc -Wall -fPIC -shared -o <output file name> -I<path to lua include directory> <input file name>

关于c - Lua liblua5.1.so无法打开共享库文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8875149/

10-12 14:52
查看更多