From: OHARA Shigeki Date: 2004-12-17T15:06:49+09:00 Subject: [ruby-dev:25236] BSD/OS rlim_t 大原です。 BSD/OS 4.1 で CVS 先端を make しようとすると、 gcc main.o libruby-static.a -ldl -lm -ominiruby -g -O2 -rdynamic -Wl,-rpath,/usr/local/lib/ruby/1.9/i386-bsdi4.0 libruby-static.a(process.o): In function `proc_getrlimit': /var/src/ruby/process.c:1991: undefined reference to `RLIM2NUM' /var/src/ruby/process.c:1991: undefined reference to `RLIM2NUM' libruby-static.a(process.o): In function `proc_setrlimit': /var/src/ruby/process.c:2035: undefined reference to `NUM2RLIM' /var/src/ruby/process.c:2036: undefined reference to `NUM2RLIM' *** Error code 1 Stop となって失敗してしまいます。 http://jarp.jin.gr.jp/diary/200412a.html#200412061 ↑おそらく、この件に関連すると思うのですが、 BSD/OS 4.1 (2.1 や 3.1 や 4.3.1 も同様) では、 struct rlimit { quad_t rlim_cur; /* current (soft) limit */ quad_t rlim_max; /* maximum value for rlim_cur */ }; となっており、 DJGPP と同様に rlim_t が無いのが原因と思い、 下記のような修正を行ったところ、 うまく make できるようになりました。 あと、これは些細な問題かもしれませんが、 BSD/OS の rm は、引数にファイルが一つも指定されていないと、 -f オプションが付いていてもエラーになってしまうようです。 このため、 make distclean する際、ext 配下の Win32API や win32ole などで、 clean: @$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) distclean: clean @$(RM) Makefile extconf.h conftest.* mkmf.log @$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) で clean が "rm -f" と展開されてエラーとなり、 その後の distclean が実行されずにゴミが残ってしまいます。 こちらはちょっとうまい解決案が浮かびませんでした。 Index: configure.in =================================================================== RCS file: /src/ruby/configure.in,v retrieving revision 1.258 diff -u -r1.258 configure.in --- configure.in 7 Dec 2004 06:44:42 -0000 1.258 +++ configure.in 17 Dec 2004 05:40:25 -0000 @@ -321,6 +321,8 @@ ac_cv_sizeof_rlim_t=4 ac_cv_func_fork=no ;; +bsdi*) LIBS="-lm $LIBS" + ac_cv_sizeof_rlim_t=4;; freebsd*) LIBS="-lm $LIBS" AC_CACHE_CHECK([whether -lxpg4 has to be linked], rb_cv_lib_xpg4_needed, ---- OHARA Shigeki (大原 重樹)