2012-01-16 18 views
2

コンパイル済みのCファイルが.so形式であり、Lua内で使用しようとしています。 2つのファイルのコードは次のとおりです。Lua liblua5.1.soは共有オブジェクトファイルを開くことができません

-- 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でうまく動作します。

これについての洞察はすばらしいことですが、どこでもこの問題を抱えている誰かを見つけることはできません。このため

+3

あなたの問題を解決し-llua5.1' '削除理由を追加する必要が有用であること。さもなければ、それは意味をなさないでしょう - 誰かがC luaモジュールをコンパイルしているのだろうか、なぜluaライブラリにリンクしたくないのでしょうか? – greatwolf

+6

解決策を回答として投稿し、それを受け入れる必要があります。それは答えとしてマークされ、同じ問題に取り組んでいる人があなたの解決策を見つけるのを容易にします。 – jpjacobs

答えて

1

I was compiling it using gcc with the -l[1] flag at lua5.1. Remove this and it will work!

-l library Search the library named library when linking.

gcc -Wall -fPIC -shared -o <output file name> -I<path to lua include directory> <input file name> 
関連する問題