[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: How should I set up C + Lua modules - resolved
- From: "Henderson, Michael D" <michael.d.henderson@...>
- Date: Fri, 18 Feb 2011 09:12:27 -0700
On Friday, February 18, 2011 6:44 AM, Luiz Henrique de Figueiredo wrote:
> I think this has been mentioned here but did you build the host program
> with "-Wl,-E" or equivalent so that the Lua API in the library linked
> in the hos is seen by dynamically loaded modules?
On Friday, February 18, 2011 1:36 AM, Iain Hibbert wrote:
> How do you link with liblua.a? Using gcc you probably need something
> like -Wl,--whole-archive to make sure that all the functions are linked
> even though they are not referenced at compile time..
Obrigado! That resolves my issue.
In a way I'm glad that I messed up the linkage. It gave me the motivation to go through the lua.c code and now my wrapper code works much better.
To summarize all that I did to get this to work...
I created lua/lib/aes/core.so with the following functions:
static int aes_version(lua_State *L) {
lua_pushstring(L, "20110217");
return 1;
}
int luaopen_aes_core(lua_State *L) {
const struct luaL_Reg myLibFunctions[] = {
{"_version", aes_version},
{0, 0}
}
lua_createtable(L, 0, 1);
luaL_register(L, 0, myLibFunctions);
return 1;
}
I use gcc on Redhat Linux, so I compiled the library with -shared -o lua/lib/aes/core.so to create a shared library.
I created lua/lib/aes.lua with the following:
local require = require
module('aes')
local core = require 'aes.core'
function version()
return "0.0 - lib = " .. core._version()
end
I created a test script lua/test/aes.lua:
#!/path/to/my/driver
require 'aes'
print("aes version is " .. aes.version())
I set LUA_PATH to include lua/?.lua.
I set LUA_CPATH to include lua/lib/?.so.
I compiled my driver C program with -Wl,-E -lua -lm -ldl.
Running lua/test/aes.lua gives the expected output:
aes version is 0.0 - lib = 20110217
Thanks again to everyone for their help,
Mike