Ruby extension issue


#1

Hi,

I am playing around with building ruby extensions in C but I have a
problem.
I’m trying to make some bindings to SDL, and everything compiles fine,
but when I load the extension in IRB, I get the following:

irb(main):001:0> require 'gamer'
irb: symbol lookup error: ./gamer.so: undefined symbol: SDL_Init

My C code is:

#include <stdio.h>
#include <ruby.h>
#include <SDL/SDL.h>

static VALUE rb_mGamer;
static VALUE rb_cScreen;

void Init_gamer()
{
    // Create a Gamer module and a Screen class within it
    rb_mGamer = rb_define_module("Gamer");
    rb_cScreen = rb_define_class_under(rb_mGamer, "Screen", 

rb_cObject);

    // Try and initialize SDL
    Sint32 init_res = SDL_Init(SDL_INIT_EVERYTHING);

    // If not everything went as planned, log the error
    if(init_res < 0)
    {
        if(rb_respond_to(rb_mGamer, rb_intern("log")))
            rb_funcall(rb_mGamer, rb_intern("log"), 1,
rb_str_new2(SDL_GetError()));
    }

    // See what was initialized and set the appropriate flags to
true or false
    Uint32 winit = SDL_WasInit(SDL_INIT_EVERYTHING);

    if(winit & SDL_INIT_AUDIO)
    {
        rb_define_const(rb_mGamer, "audio", Qfalse);
    } else {
        rb_define_const(rb_mGamer, "audio", Qtrue);
    }
}

Do I have to tell ruby to load the SDL library as well when loading my
extension?

Thanks in advance,

Wim


Wim Vander S.
Bachelor Computer Science, University Ghent

http://nanoblog.ath.cx
My weblog, powered by Ruby and BSD licensed.