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