From: Eric Wong Date: 2011-08-05T16:00:41+09:00 Subject: [ruby-core:38812] Re: [Ruby 1.9 - Bug #5147] mkmf should not require static library when ruby is built with --enable-shared Nobuyoshi Nakada 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