From: Nobuyoshi Nakada Date: 2006-10-27T14:27:36+09:00 Subject: [ruby-dev:29699] Re: *LDFLAGSについて なかだです。 At Fri, 27 Oct 2006 02:47:47 +0900, Yutaka Kanemoto wrote in [ruby-dev:29698]: > すこし前の以下のパッチ > * lib/mkmf.rb (init_mkmf): set default $LDFLAGS. Patch by Michal > Suchanek . [ruby-talk:216256] > により、AIXで拡張ライブラリのcompileが通らなくなったので調べました。 すいません、そんなところに影響が出るとは。 > ひとつおたずねしたいのですが、*FLAGSという > 変数について以下のように解釈したのですが、意図されているように > 理解できていますでしょうか? > DLDFLAGS *.soの共有ライブラリを作る時にリンカにわたしたいもの > XLDFLAGS rubyコマンドをつくるとき"だけ"にリンカにわたしたいもの > LDFLAGS いつでもわたしたいもの XLDFLAGSは実行ファイルを作るとき、かな? > XLDFLAGSをminirubyにわたせばいいかと思ったのですが、 > 過去ログをみると、やはり、XLDFLAGSはrubyをリンクするときのみのためのもの > のようです。 > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19723 > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/23588 [ruby-dev:23565]ではminirubyにもXLDFLAGSを使おうという話になってますね。 > minirubyにこのオプションがわたらない場合の現象としましては、 > make installの途中でcoreを吐いてしまいます。 > minirubyがetc.soのInit_etcにはいった中でおちています。 MINIOBJSにdmydln.oを追加して、minirubyでは拡張ライブラリをロードしない ようにする、という方法もありますが。 > まとめますと、rubyとminirubyのリンク時にだけわたしたい > オプションがあるのでなんとかしたい。ということになります。 これではどうでしょうか。-bオプションの順序は問題ではない、AIXでのダイ ナミックリンクは独自っぽいのでdln_a_outは無効、と仮定してます。 Index: Makefile.in =================================================================== RCS file: /pub/cvs/ruby/Makefile.in,v retrieving revision 1.55.2.18 diff -U 2 -p -r1.55.2.18 Makefile.in --- Makefile.in 1 Oct 2006 15:00:32 -0000 1.55.2.18 +++ Makefile.in 27 Oct 2006 04:34:29 -0000 @@ -98,5 +98,5 @@ all: miniruby$(EXEEXT): @$(RM) $@ - $(PURIFY) $(CC) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(MAINLIBS) + $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@ $(PROGRAM): Index: configure.in =================================================================== RCS file: /pub/cvs/ruby/configure.in,v retrieving revision 1.212.2.63 diff -U 2 -p -r1.212.2.63 configure.in --- configure.in 22 Oct 2006 19:28:46 -0000 1.212.2.63 +++ configure.in 27 Oct 2006 04:44:38 -0000 @@ -1046,11 +1046,13 @@ if test "$with_dln_a_out" != yes; then rb_cv_dlopen=yes ;; aix*) if test "$GCC" = yes; then - : ${LDSHARED='gcc -shared'} - DLDFLAGS='-Wl,-G -eInit_$(TARGET)' - LDFLAGS='-Wl,-brtl -Wl,-bE:ruby.imp' - else - : ${LDSHARED='/usr/ccs/bin/ld'} - DLDFLAGS='-G -eInit_$(TARGET)' - LDFLAGS="-brtl -bE:ruby.imp" + : ${LDSHARED='$(CC) -shared'} + DLDFLAGS='-Wl,-G -eInit_$(TARGET)' + LDFLAGS='-Wl,-brtl' + XLDFLAGS='-Wl,-bE:ruby.imp' + else + : ${LDSHARED='/usr/ccs/bin/ld'} + DLDFLAGS='-G -eInit_$(TARGET)' + LDFLAGS='-brtl' + XLDFLAGS='-bE:ruby.imp' fi : ${ARCHFILE="ruby.imp"} @@ -1360,10 +1362,9 @@ if test "$enable_shared" = 'yes'; then aix*) if test "$GCC" = yes; then - LIBRUBY_LDSHARED='$(CC) -shared' - LIBRUBY_DLDFLAGS='-Wl,-G -Wl,-bE:ruby.imp -Wl,-bnoentry' + LIBRUBY_DLDFLAGS='-Wl,-G -Wl,-bnoentry' else - LIBRUBY_LDSHARED='/usr/ccs/bin/ld' - LIBRUBY_DLDFLAGS='-G -bE:ruby.imp -bnoentry' + LIBRUBY_DLDFLAGS='-G -bnoentry' fi + LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS $XLDFLAGS" LIBRUBYARG_SHARED='-L${libdir} -lruby' SOLIBS='-lm -lc' @@ -1501,7 +1502,4 @@ case "$target_os" in MINIOBJS=dmydln.o ;; - aix*) - PREINSTALL='@$(RM) -r $(prefix)/lib/$(LIBRUBY_A) $(prefix)/lib/$(LIBRUBY_SO) $(prefix)/lib/ruby/$(MAJOR).$(MINOR)/$(arch)' - ;; *) ;; @@ -1536,5 +1534,4 @@ AC_SUBST(COMMON_HEADERS) AC_SUBST(EXPORT_PREFIX) AC_SUBST(MINIOBJS) -AC_SUBST(PREINSTALL) MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`" -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦