From: siena@... (Siena. / SHINAGAWA, Norihide)
Date: 2003-10-29T20:18:49+09:00
Subject: [ruby-dev:21765] library linkage options by extmk.rb (was: ruby 1.8.1 preview1 schedule)
Siena. です。
》明日30日夕方4時頃をめどにpreview1をリリースします。
慌てふためいて ^^; ご報告。
時間が取れないのでビルドを通しただけですが、以下ご確認ください。
OS/2 V4 with EMX 0.9d で ruby 1.8.0 はビルドできていました。
現在の CVS 版を次のようにビルドするとリンクエラーが頻発します。
例によって、リンク可能なライブラリは静的リンク全部入り、です。
$ ( cd ext ; mv Setup.emx Setup.emx.org ;
egrep -vi 'win|\
' Setup.emx.org | sed 's/# *//' > Setup.emx )
$ autoconf
$ ./configure --with-static-linked-ext=yes --disable-shared
$ make 2>&1| sed 's/referenced from text segment/.../g'
(略)
SETUP=ext/Setup.emx
EXTOBJS=(略)
EXTLIBS=-lncurses -ltermcap -liconv -lreadline -lsocket -lz
EXTLDFLAGS=-L"$(libdir)"
making ruby.exe
/bin/sh: libdir: not found
make[1]: Entering directory `/tmp/ruby'
gcc -Zmt -DOS2 -Zmts -I. -I. -o ext/extinit.o -c ext/extinit.c
gcc -Zmt -DOS2 -Zmts -Zbsd-signals -L. -L main.o ($EXTOBJS:略) \
-lruby-static -lm ($EXTLIBS:略) -o ruby.exe
T:\lib\crt0.o: Undefined symbol _main ...
T:\lib/readline.a(display.o): Undefined symbol _tgoto ...
T:\lib/readline.a(display.o): Undefined symbol _tgoto ...
T:\lib/readline.a(terminal.o): Undefined symbol _tgetnum ...
(たくさん略)
T:\lib/readline.a(terminal.o): Undefined symbol _tgetflag ...
make[1]: *** [ruby.exe] Error 1
(略)
二つの問題があり、ext/extmk.rb に対する添付のパッチで
make test まで通るのを確認しました。
(1) EXTFLAGS が引数無しの "-L" に展開され、main.o がリンクされない
ChangeLog:
|Wed Aug 6 17:28:10 2003 Nobuyoshi Nakada
| * ext/extmk.rb (extmake): pass LIBPATH to make ruby. [ruby-dev:21137]
"$(libdir)" が正しく展開されるように変更するのが本筋かと思いますが、
とりあえずの対症療法として $extpath から "$(libdir)" を削除しました。
(2) $extlibs の重複除去のため、EXTLIBS の正しいリンク順が破壊される
ChangeLog:
|Tue Aug 12 16:55:11 2003 Nobuyoshi Nakada
| * ext/extmk.rb (extmake): compact $extlibs.
少なくともうちのビルド環境では、経験的に調べた範囲では、
ライブラリ a が b に依存する場合に、リンク時のコマンドでオプションの
指定順は "-la -lb" とせねばならず、"-lb -la" とはできないようです。
上記の変更のために、重複した時にこの逆転が起きてしまっています。
パッチでは、新規追加分を $extlibs の左側に追加するようにしました。
Index: ruby/ext/extmk.rb
===================================================================
RCS file: /src/ruby/ext/extmk.rb,v
retrieving revision 1.43
diff -u -p -2 -r1.43 extmk.rb
--- ruby/ext/extmk.rb 17 Aug 2003 02:32:07 -0000 1.43
+++ ruby/ext/extmk.rb 29 Oct 2003 08:55:46 -0000
@@ -110,5 +110,5 @@ def extmake(target)
$extflags += " " + $DLDFLAGS unless $DLDFLAGS.empty?
$extflags += " " + $LDFLAGS unless $LDFLAGS.empty?
- $extlibs |= $libs.split | $LOCAL_LIBS.split
+ $extlibs = $libs.split | $LOCAL_LIBS.split | $extlibs
$extpath |= $LIBPATH
end
@@ -261,4 +261,5 @@ SRC
end
$extpath.delete("$(topdir)")
+ $extpath.delete("$(libdir)")
$extflags = libpathflag($extpath) << " " << $extflags.strip
conf = [
---
Siena.