2012-01-16 54 views
2

因此,我有一個.so格式的編譯C文件,並試圖在Lua中使用它。這兩個文件的代碼是: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模塊,爲什麼你不想鏈接到l​​ua庫? – greatwolf 2012-01-16 05:17:10

+6

您應該將解決方案作爲答案發布並接受它。它會將問題標記爲已回答,並且可以讓人們更輕鬆地解決相同的問題以找到解決方案。 – jpjacobs 2012-01-16 07:55:49

回答

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> 
相關問題