Lua liblua5.1.so не может открыть общий объектный файл - PullRequest
2 голосов
/ 16 января 2012

Итак, у меня есть скомпилированный файл C в формате .so, и я пытаюсь использовать его из Lua. Код для 2 файлов:

-- 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.so должен существовать.

Я получаю эту ошибку на openSUSE 64bit, но этот точный код отлично работает на OSX.

Любое понимание этого было бы замечательно, я не могу найти никого другого с этой проблемой.

1 Ответ

1 голос
/ 16 января 2013

Я компилировал его, используя gcc с флагом -l [1] в lua5.1. Удалите это, и это будет работать!

-l библиотека Поиск библиотеки по имени библиотеки при связывании.

gcc -Wall -fPIC -shared -o <output file name> -I<path to lua include directory> <input file name>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...