[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Static Ruby

Marc Heiler

3/24/2008 6:40:00 PM

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.)
--
Posted via http://www.ruby-....

3 Answers

Nobuyoshi Nakada

3/25/2008 6:50:00 AM

0

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.

--
Nobu Nakada

Kyle Schmitt

3/25/2008 1:27:00 PM

0

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

On Mon, Mar 24, 2008 at 1:39 PM, Marc Heiler <shevegen@linuxmail.org> wrote:
> 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.)
> --
> Posted via http://www.ruby-....
>
>

Marc Heiler

6/5/2008 9:18:00 AM

0

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!
--
Posted via http://www.ruby-....