Static Ruby

M

Marc Heiler

Hi there,

typically I modify CFLAGS variable to include a pure
static version before compiling, as in:

CFLAGS='-static'

This works for sed, grep, bash etc.. easily, but for ruby,
this does not seem to work as straight forward.

If i invoke certain scripts that use md5 or similar "add-ons"
I get errors such as:

socket.so: undefined symbol: rb_eSecurityError

Sometimes different rb_e* Errors occur.

Someone else said that I should modify ext/Setup
but I am wondering whether this is the default route one
has to follow to get to a static version of ruby?

One reason i'd like to have it all inside one ruby
binary is that I dont want to have it fail if a host
lib is missing or broken.
(The size penalty is of no concern at all to me.)
 
N

Nobuyoshi Nakada

Hi,

At Tue, 25 Mar 2008 03:39:37 +0900,
Marc Heiler wrote in [ruby-talk:295548]:
Someone else said that I should modify ext/Setup
but I am wondering whether this is the default route one
has to follow to get to a static version of ruby?

configure --disable-shared --with-static-linked-ext

See `configure --help' for more info.
 
K

Kyle Schmitt

Along with Nobuyoshi's excellent advice, make sure you look in the
etc/Setup file. You will probably need to edit it to select which
libs to include by default. Very useful for making small static ruby
distributions you can move from machine to machine.

--Kyle
 
M

Marc Heiler

Hi there,

Sorry for the late reply, I didn't get to recompile ruby for some
time. I did it now with the latest 1.8.7, thanks to Nobuyoshi's hint.

The compile part worked out nicely, the resulting ruby bin/ dir took
about ~ +1.8 MB in size.
However there were two problems, and I played a bit with it inside
ext/Setup as Kyle suggested but to no real avail (uncommenting #openssl
and #fcntl and recompiling lead to some weird effect ruby was working
but the sizes inside the ruby bin/ dir were suddenly as small as the
shared versions...)

One problem was this here:

ssl.rb:19:in `require': no such file to load -- fcntl


The other was OpenSSL related.

openssl/ssl.rb:26: uninitialized constant OpenSSL::SSL::VERIFY_PEER

I am a bit at a loss now :)

Also, if I do a "ldd ruby" i get a lot of libraries listed.
But if i normally do a ldd on a static binary, like this

"ldd grep"

I get:

not a dynamic executable


Appreciate more help, and thanks a lot for the pointers so far!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,585
Members
45,081
Latest member
AnyaMerry

Latest Threads

Top