# Static Ruby

**URL:** <https://www.ruby-forum.com/t/static-ruby/132793>\
**Category:** Ruby\
**Created:** [March 24, 2008, 7:39pm UTC](https://www.ruby-forum.com/t/static-ruby/132793 "2008-03-24T19:39:46Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [March 24, 2008, 7:39pm UTC](https://www.ruby-forum.com/t/static-ruby/132793/1 "2008-03-24T19:39:46Z")

</div>

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.)

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [March 25, 2008, 7:50am UTC](https://www.ruby-forum.com/t/static-ruby/132793/2 "2008-03-25T07:50:21Z")

</div>

Hi,

At Tue, 25 Mar 2008 03:39:37 +0900,  
Marc H. 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.

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [March 25, 2008, 2:27pm UTC](https://www.ruby-forum.com/t/static-ruby/132793/3 "2008-03-25T14:27:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![quik77](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/q/dec6dc/32.png) [@quik77](https://www.ruby-forum.com/u/quik77)\
**Post date:** [June 5, 2008, 11:19am UTC](https://www.ruby-forum.com/t/static-ruby/132793/4 "2008-06-05T11:19:21Z")

</div>

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!
