matz / netlab.co.jp (Yukihiro Matsumoto) writes: > Hi, > > In message "[ruby-talk:02770]" > on 00/05/11, Andrew Hunt <Andy / Toolshed.Com> writes: > > |I'm trying to install mod_ruby 0.17 with the latest Ruby from CVS, > |and I'm running into a spot of trouble. > | > |Using the Makefile produced by Makefile.rb, the module fails to load -- > |it complains that: > | > |Cannot load /toolshed/local/libexec/mod_ruby.so into server: > |/toolshed/local/libexec/mod_ruby.so: undefined symbol: rb_io_close > |/toolshed/local/bin/apachectl start: httpd could not be started > | > |And indeed, there's nothing in the Makefile that indicates Ruby should > |be linked in. So I thought I'd be daring and add libruby.a into the > |shared obejct link. > > Hmm, Makefile.RB should find the place for libruby.a or libruby.so > from compilation information, which is placed in rbconfig.rb. > > My Makefile contains the line: > > LIBRUBYARG = -L/usr/lib -lruby > > to link the interpreter. Well, I finally tracked it down. I feel kind of silly not to find it earlier, but at the same it, it _is_ a bug, either in mkmf or in mod_ruby's Makefile.RB. We were all on the right track earlier when we were looking at libraries. However, the problem turned to to be subtle. When you run 'ruby Makefile.RB' in the mod_ruby directory, you get a Makefile that contains: RUBY_INSTALL_NAME = ruby LIBRUBYARG = $(LIBRUBY_A) <<<<<<<<< bug<<<<<<<<<<<<<< OBJS = mod_ruby.o ruby_config.o apachelib.o eruby.o TARGET = mod_ruby.so The link line has $(TARGET): $(OBJS) $(LDSHARED) $(DLDFLAGS) $(XLDFLAGS) -o $(TARGET) $(OBJS) $(LIBRUBYARG)... LIBRUBYARG is empty, but the link doesn't care, because it assumes it will resolve things when the .so is loaded. Now the part I don't understand. When we initially had all these problems, we tried building Ruby with --enable-shared. This left a libruby.so lying around. When mod_ruby loaded, it linked into this libruby.so, and things failed--it seems to go wrong whenever the Ruby script tried to do output. Any, today I did two things: 1. I did a 'find / -name libruby.so -exec rm {}\;' 2. I manually edited the Makefile in mod_ruby to include LIBRUBYARG = -L /tc/usr/lib/ruby/1.5/i686-linux -lruby make, make install, and it all ran first time! So, there seem to be two problems: 1. mod_ruby's Makefile has ($LIBRUBY_A) in it, rather than the -L -l 2. mod_ruby doesn't seem to work with a shared libruby.so (it could well be that _nothing_ works with libruby.so on my box) Does this all make sense? Dave