作者: Atsushi SHICHI
日時: 2002/8/09(22:31)
はじめまして、しちと申します。

かなり前の話題についてですが、質問させて下さい。

At Wed, 17 Apr 2002 22:50:55 +0900,
Keiichi Takahashi <bitwalk@...> wrote:

> ビットウォークの高橋です。

> 早速、日本語パッチを更新したRPMをアップしました。

> http://members10.tsukaeru.net/bitwalk/src/perl-Tk-800.024-27bw.nosrc.rpm

上記の nosrc を利用させて頂こうと思い、Tk800.024.tar.gz を取ってきて
(何も手を加えずに)以下の環境でビルドし、インストールしました。

Vine Linux 2.1.5 / perl-5.00503_jp-14.2

/usr/bin/widget (Perl/Tk Widget Demonstrations)も順調に動いている
ように見えたのですが「Vertical scale」を実行しようとすると

perl: error in loading shared libraries: /usr/lib/perl5/site_perl
/5.005/i386-linux/auto/Tk/Scale/Scale.so: undefined symbol: XSetFont
(実際は一行)

となる事に気付きました。以下のようなテストスクリプトでも同様でした。

$ perl -MTk -e 'MainWindow->new->Scale->pack; MainLoop;'
perl: error in loading shared libraries: /usr/lib/perl5/site_perl
/5.005/i386-linux/auto/Tk/Scale/Scale.so: undefined symbol: XSetFont
(実際は一行)

よく分かっていませんが、私の環境でビルドしたものでは

$ objdump -T Scale.so | grep XSetFont
00000000      D  *UND*  00000000              XSetFont
$ ldd Scale.so
        libm.so.6 => /lib/libm.so.6 (0x2aab8000)
        libc.so.6 => /lib/libc.so.6 (0x2aad5000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)
$ objdump -T Tk.so | grep XSetFont
$ ldd Tk.so
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2ab61000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x2ac06000)
        libm.so.6 => /lib/libm.so.6 (0x2ac1c000)
        libc.so.6 => /lib/libc.so.6 (0x2ac3a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)

となりますが、高橋さんがビルドされた以下のパッケージでは

> パッケージ名
> perl-Tk-800.024-27bw.i386.rpm

> http://members10.tsukaeru.net/bitwalk/src/perl-Tk-800.024-27bw.i386.rpm

> ビルドした環境は、
> 
> Red Hat Linux 7.2 / perl-5.6.1-26.72.3
> 
> です。

$ objdump -T Scale.so | grep XSetFont
$ ldd Scale.so
        libm.so.6 => /lib/libm.so.6 (0x2aab4000)
        libc.so.6 => /lib/libc.so.6 (0x2aad1000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)
$ objdump -T Tk.so | grep XSetFont
00000000      DF *UND*  0000007d              XSetFont
$ ldd Tk.so
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2ab63000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x2ac08000)
        libm.so.6 => /lib/libm.so.6 (0x2ac1e000)
        libc.so.6 => /lib/libc.so.6 (0x2ac3c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)

となります。皆さんの環境では、問題無いでしょうか?
それで、とりあえず以下の様なパッチをあててビルドし直したところ、

--^ Scale_Makefile.PL.patch
diff -uNr Tk800.024.old/Scale/Makefile.PL Tk800.024.new/Scale/Makefile.PL
--- Tk800.024.old/Scale/Makefile.PL     Fri Aug  9 01:19:47 2002
+++ Tk800.024.new/Scale/Makefile.PL     Fri Aug  9 01:38:34 2002
@@ -1,7 +1,7 @@
 
 use Tk::MMutil;
 Tk::MMutil::TkExtMakefile(
-      ($^O eq 'MSWin32' ? () : ('LIBS'        => ["-lm"])),
+      ($^O eq 'MSWin32' ? () : ('LIBS'        => ["-L/usr/X11R6/lib -lX11 -lm"])),
       'dynamic_ptk' => 1
       );
 
--$

$ objdump -T Scale.so | grep XSetFont
00000000      DF *UND*  0000006f              XSetFont
$ ldd Scale.so
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2aab8000)
        libm.so.6 => /lib/libm.so.6 (0x2ab5d000)
        libc.so.6 => /lib/libc.so.6 (0x2ab7a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)
$ objdump -T Tk.so | grep XSetFont
$ ldd Tk.so
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2ab61000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x2ac06000)
        libm.so.6 => /lib/libm.so.6 (0x2ac1c000)
        libc.so.6 => /lib/libc.so.6 (0x2ac3a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x55555000)

となり、上記のテストスクリプトも動作しました。が、今度は、

$ perl -MTk -e \
'MainWindow->new->Scale(-label => "Scale Widget")->pack; MainLoop;'

とラベルを指定すると、ウィンドウには「SaeWde」と1文字おき
に表示され、日本語を指定すると化けるようになりました。^^;

さて、どのように対処すれば良いのでしょうか?
ビルドした環境について、他に必要な情報がありましたらご指摘下さい。
nohup rpm -vv -bb 〜として取得したビルド時のログも残してあります。
宜しくお願い致します。

-- 
Atsushi SHICHI <ats7@...>