Sign in to follow this  

Luabind inside a Shared Library

Recommended Posts

So, I've got Luabind et. al. setup properly and I'm trying to use it to fuel a binary extension module for Lua (i.e. a module for Lua written in C/C++). Unfortunately, it's been a long time since I've done anything C++ related and, frankly, I'm failing miserably. I've managed to get the following basic example running:

// helloworld.cpp
#include <iostream>
#include <luabind>

void greet()
std::cout << "hello world!\n";

// int luaopen_[libname] is the entry point
extern "C" int luaopen_libhelloworld(luaState* L)
using namespace luabind;


def("greet", &greet),

return 0;
The above, when compiled into a [i].so[/i], works as expected.

[code]require 'libhelloworld'
-- prints "hello world!"
Unfortunately, chaos sets in when I attempt to bind a simple class, e.g.:
class Test

void say() { std::cout << "Inside a class!" << std::endl; }

def("greet", &greet),

.def("say", &Test::say)
at which point the undefined symbols start flying as I try to load the library in Lua. Specifically:[list]
[*][i] ./ undefined symbol: _ZN4TestC1Ev[/i]
The literature on Lua binary modules appears to be archaic and almost every example I've come across is either in pure C or C-like C++ (e.g. the working example above). I realize the error is most likely caused by name mangling but I'm not sure how to resolve it. I investigated exporting symbols with GCC by using [i]__attribute__((__visibility__("default")))[/i], but that doesn't appear to have any effect. Some sparse documentation recommended appending [i]-WI -E[/i] to the GCC arg list and that doesn't appear to have done much either ([i]-E [/i]is just a preprocessor pass?).

The only other valid example I can find is the Ogre bindings to Lua (using Luabind) which doesn't use an entry point at all as far as I can tell. Unfortunately, I'm not entirely clear how they got away with that since anytime I try Lua - surprise - whines about not having a valid entry point.

I realize this should probably be elsewhere (like on the mailing list) but I was kind of hoping my problem was either obvious or a Luabind guru was somewhere nearby. Any help would be greatly appreciated.

[b]EDIT: SOLVED[/b]. I forgot to define the constructor. *hangs head in shame* My apologies folks, this is precisely why sleep is important. Edited by Kyan

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this