Nobuyoshi Nakada <nobu / ruby-lang.org> wrote:
> Eric Wong wrote in [ruby-core:38802]:
> > I've bisected r32833 to breaking many of my external C extension builds:
> >
> > $ ruby -rmkmf -e 'p have_func("rb_str_set_len")'
> > checking for rb_str_set_len()... no
> > false
> 
> $ ruby -v -rmkmf -e 'p have_func("rb_str_set_len")'
> ruby 1.9.4dev (2011-08-05 trunk 32854) [x86_64-linux]
> checking for rb_str_set_len()... yes
> true

Hi, I've noticed passing --enable-shared to ./configure works around
this issue.  Only the default static libruby fails.

> Can't you show mkmf.log file?

This is my mkmf.log with only --prefix=$HOME/r/trunk passed to
./configure, I see no attempts to link libruby-static at all:

have_func: checking for rb_str_set_len()... -------------------- no

"gcc -o conftest -I/home/ew/r/trunk/include/ruby-1.9.1/x86_64-linux -I/home/ew/r/trunk/include/ruby-1.9.1/ruby/backward -I/home/ew/r/trunk/include/ruby-1.9.1 -I.     -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -L/home/ew/r/trunk/lib -Wl,-R/home/ew/r/trunk/lib -L.  -rdynamic -Wl,-export-dynamic       -lpthread -lrt -ldl -lcrypt -lm   -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main() {return 0;}
/* end */

"gcc -o conftest -I/home/ew/r/trunk/include/ruby-1.9.1/x86_64-linux -I/home/ew/r/trunk/include/ruby-1.9.1/ruby/backward -I/home/ew/r/trunk/include/ruby-1.9.1 -I.     -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -L/home/ew/r/trunk/lib -Wl,-R/home/ew/r/trunk/lib -L.  -rdynamic -Wl,-export-dynamic       -lpthread -lrt -ldl -lcrypt -lm   -lc"
/tmp/cc0KSG3Y.o: In function `t':
/home/ew/ruby/conftest.c:5: undefined reference to `rb_str_set_len'
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: /*top*/
4: int main() {return 0;}
5: int t() { void ((*volatile p)()); p = (void ((*)()))rb_str_set_len; return 0; }
/* end */

"gcc -o conftest -I/home/ew/r/trunk/include/ruby-1.9.1/x86_64-linux -I/home/ew/r/trunk/include/ruby-1.9.1/ruby/backward -I/home/ew/r/trunk/include/ruby-1.9.1 -I.     -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -L/home/ew/r/trunk/lib -Wl,-R/home/ew/r/trunk/lib -L.  -rdynamic -Wl,-export-dynamic       -lpthread -lrt -ldl -lcrypt -lm   -lc"
conftest.c: In function °∆t°«:
conftest.c:5: error: too few arguments to function °∆rb_str_set_len°«
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: /*top*/
4: int main() {return 0;}
5: int t() { rb_str_set_len(); return 0; }
/* end */

--------------------
-- 
Eric Wong