Jump to content
  • Advertisement
Sign in to follow this  

Luabind inside a Shared Library

This topic is 2550 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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 .so, works as expected.

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:

  • ./libhelloworld.so: undefined symbol: _ZN4TestC1Ev

    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 __attribute__((__visibility__("default"))), but that doesn't appear to have any effect. Some sparse documentation recommended appending -WI -E to the GCC arg list and that doesn't appear to have done much either (-E 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.

    EDIT: SOLVED. 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
Sign in to follow this  

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!