On Oct 31, 2:55 ¨Âí¬ Êåòåíù Èéîåçáòäîå¼êåò®®®Àèéîåçáòäîåò®ïòç¾ ÷òïôåº
> On Sat, Oct 31, 2009 at 10:00:05PM +0900, Sean O'Donnell wrote:
> > Hello,
>
> > I am trying to put together a compiled, standalone version of ruby
> > that I can drop into a user directory from a portable drive. Think:
> > classroom setting with twenty, un-networked OSX 10.4/PPC machines. I
> > want to compile once on one of these machines, then tarball it up and
> > copy it out to the user's home directory on each of the other
> > computers. I then update the user's PATH (e.g., /Users/student/local/
> > ruby) to find this version of ruby.
>
> > Here's how I build it now, which isn't quite working:
>
> > ruby-1.87-src> ./configure --prefix=/Users/teacher/local
> > ruby-1.87-src> make && make install
>
> > It's built in my local directory, which I tarball and then copy out
> > to /Users/student/local on the other PPCs. But, when I try to run it
> > from the other computer, I get this error:
>
> > ==start
>
> > dyld: lazy symbol binding failed: Symbol not found: _ruby_init_stack
> >  ¨Âåæåòåîãåæòïí¯Áððìéãáôéïîó¯ÍËÓÁбµ¯ÒïÒ¯Òõâù¯âéî¯òõâ> >  ¨Âøðåãôåéî¯õóò¯ìéâ¯ìéâòõâù®äùìéâ
>
> > dyld: Symbol not found: _ruby_init_stack
> >  ¨Âåæåòåîãåæòïí¯Áððìéãáôéïîó¯ÍËÓÁбµ¯ÒïÒ¯Òõâù¯âéî¯òõâ> >  ¨Âøðåãôåéî¯õóò¯ìéâ¯ìéâòõâù®äùìéâ
>
> > Trace/BPT trap
>
> > =end
>
> These are errors from the linker on the other PPC. When you built ruby
> it put the path to the shared library in the executable, and the file
> /usr/lib/libruby.dylib does not exist on the student's machine.
>
> > Thoughts? I guess the high-level question is this: Are there
> > additional flags that I need to pass to `configure` to build a self-
> > contained, architecture-specific version?
>
> Built a fully staticly linked ruby instead.  ¨Âùïðìáî ïî õóéîúìéâ ïò
> openssl in your teaching you'll need to build them and put them in the
> tarball too.
>
> Edit the ext/Setup file in the ruby distribution tarball to turn on the
> 'nodynamic' option and uncomment each extension you would like compiled
> statically.
>
> Then run :
>
> ./configure --disable-shared --prefix=/Users/student/local/ruby
> make && make install
>
> Then I believe you'll be a step closer.  ¨Âïéîç ôèéó ÷éìì äéóáâìôè> dynamic loading of extensions, so I'm assuming that you will not later
> deploy gems with extensions on top of this.
>
> enjoy,
>
> -jeremy
>
> --
> ========================================================================
>  ¨ÂåòåíÈéîåçáòäîå ¨Â ¨Âåò®®®Àèéîåçáòäîåò®ïò
Thanks - I may go this way. However, if I were to continue with a non-
static version, how would I force the path to point to the desired
shared library? Like this?

./configure --prefix=/Users/student/local --libdir=/Users/student/
local

In the version I've built, I can see libruby.dylib in the /Users/
student/local/lib directory. It was my intention to keep these shared
libraries contained within the build. I guess the executable just
wasn't pointing to it.

I'm glad you mentioned that I cannot deploy w/extensions on top of the
statically built ruby. I need to use sqlite3-ruby, which may fall into
this category. Sounds like I've got some experimenting to do.

Thanks,
Sean