Mkmf and extconf.rb

Hi,

I’m using the mkmf module to create a Makefile for a C extension I’m
writing. Unfortunately, when I create the Makefile using
’create_makefile(‘foo’)’ in extconf.rb, the following line gets
written out:

LIBS = -L. -l$(RUBY_INSTALL_NAME) -lc

This has the effect that my tiny piece of code is linked against
libruby, which has the effect of making it unnecessarily huge. How can
I stop mkmf from adding ‘-l$(RUBY_INSTALL_NAME)’ to LIBS?

Ian

···


Ian Macdonald | The co-locator cannot verify the
ian@caliban.org | frame-relay gateway to the ISDN server.
>
>
>

I’ve managed to figure this out. libruby.a was getting linked in by
accident.

Ian

···

On Wed 19 Jun 2002 at 07:40:34 +0900, Ian Macdonald wrote:

I’m using the mkmf module to create a Makefile for a C extension I’m
writing. Unfortunately, when I create the Makefile using
‘create_makefile(‘foo’)’ in extconf.rb, the following line gets
written out:

LIBS = -L. -l$(RUBY_INSTALL_NAME) -lc

This has the effect that my tiny piece of code is linked against
libruby, which has the effect of making it unnecessarily huge. How can
I stop mkmf from adding ‘-l$(RUBY_INSTALL_NAME)’ to LIBS?


Ian Macdonald | “If you understand what you’re doing,
ian@caliban.org | you’re not learning anything.” – A. L.
>
>
>

I’m using the mkmf module to create a Makefile for a C extension I’m
writing. Unfortunately, when I create the Makefile using
‘create_makefile(‘foo’)’ in extconf.rb, the following line gets
written out:

LIBS = -L. -l$(RUBY_INSTALL_NAME) -lc

This has the effect that my tiny piece of code is linked against
libruby, which has the effect of making it unnecessarily huge. How can
I stop mkmf from adding ‘-l$(RUBY_INSTALL_NAME)’ to LIBS?

Well, you have to link your extension against the Ruby library so that it
can resolve your calls to functions like rb_define_method() et al. But I
would guess that you’re linking against the static library (libruby.a)
instead of the shared library (libruby.so)? If so you need to go back and
configure the Ruby build to use a shared library instead, i.e.

./configure --enable-shared
make
make install

Hope this helps,

Lyle