在Redhat linux9.0中编译安装w3m的经验

因为Redhat linux9.0自带的w3m-0.3.*(好像是)不能显示UTF-8编码的中文网页,比如我们学习日记,所以我用rpm -e w3m的命令卸载了原来的w3m,从网上下载高版本的来安装。

安装w3m-0.5.1,从http://prdownloads.sourceforge.net/w3m/处下载;

需要libgc库,从 http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/处下载了一个6.2版的;

安装libgc;

安装w3m-0.5.1,问题来了,执行./configure时不成功,提示:


checking size of long long... configure: error: cannot compute sizeof (long long), 77

See `config.log' for more details.

上网查询,在执行./configure前设置环境变量解决。

设置环境变量:


export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"

编译安装完,执行w3m,提示找不到libgc.so.1:


w3m: error while loading shared libraries: libgc.so.1: cannot open shared object file: No such file or directory

在/lib中加了一个libgc.so.1到/usr/local/lib/libgc.so.1.0.2的符号链接解决:


ln -s /usr/local/lib/libgc.so.1.0.2 /lib/libgc.so.1

下面附上两篇有关“安装w3m-0.5.1,问题来了,执行./configure时不成功”的帖子,是日本的。

2 thoughts on “在Redhat linux9.0中编译安装w3m的经验”

  1. (转自:http://www.tatsuyoshi.net/toyota/tech/20060331/index.html

    ここに書かれていることは無保証です。同じことを行って問題が発生しても、龍義は責任をとりません。

    2006年3月31日

    戻る

    w3m の configure のエラー。

    w3m の configure で、以下のエラーが出た。

    checking size of long long... configure: error: cannot compute sizeof (long long), 77

    See `config.log' for more details.

    環境は RedHat9 / FedoraCore4 での Linux 。これを調べてみる。まず、この

    環境でやったことは、 w3m で必要な libgc である Boehm GC をインストール

    したこと。これは、 source をとってきて ./configure; make install ぐらいを

    したのみ。w3m のバージョンは最新(と言っても、日付は2004年か…)の、0.5.1

    を使った。これを解凍して configure すると。

    [toyota@kashyyyk]% ./configure

    〜snip〜

    checking size of long long... configure: error: cannot compute sizeof (long long), 77

    See `config.log' for more details.

    調べてみたのだけど、ここに

    export LDFLAGS='-Xlinker -R/usr/local/lib'

    とするとうまくいく、ということが書いてあった。確かにうまくいったのだけど、

    元記事にはよくわからないけど、やってみた、とか書いてあるし、なんとなく

    納得いかないので調べてみた。-Xlinker はリンカに渡すオプションという意味で、

    このあとのオプションはリンカに渡されるようである。つまり、 -R/usr/local/lib

    の部分がリンカに渡される。なので、 ld を調べてみたのだけど、 -R のオプション

    は、なんかファイル名の指定をするみたいな感じ、と思ったが、ちゃんと書いて

    あった。

    For  compatibility  with other ELF linkers, if the -R option is followed by a

    directory name, rather than a file name, it is treated as the -rpath option.

    だそうだ。なので、正確には、

    export LDFLAGS='-Xlinker -rpath /usr/local/lib'

    とするようである。解決方法はわかったが、原因がわからない。調べてみることに

    した。

    configure の中で、エラーを起きている部分を見た。以下のプログラムのコンパイル

    に失敗しているようである。

    long longval () { return (long) (sizeof (long long)); }

    unsigned long ulongval () { return (long) (sizeof (long long)); }

    #include <stdio.h>

    #include <stdlib.h>

    int

    main ()

    {

      FILE *f = fopen ("conftest.val", "w");

      if (! f)

        exit (1);

      if (((long) (sizeof (long long))) < 0)

        {

          long i = longval ();

          if (i != ((long) (sizeof (long long))))

        exit (1);

          fprintf (f, "%ld\n", i);

        }

      else

        {

          unsigned long i = ulongval ();

          if (i != ((long) (sizeof (long long))))

        exit (1);

          fprintf (f, "%lu\n", i);

        }

      exit (ferror (f) || fclose (f) != 0);

      ;

      return 0;

    }

    本当はヘッダの部分にもう少し色々とつくのだけど、無くても問題が全くない。

    まず、これを、一般ユーザでコンパイルしてみるが、問題なくコンパイルと、

    実行はできる。じゃ、 configure はどうやってコンパイルをしているのか、

    見てみた。

    gcc -o conftest -g -O2 -I./libwc -I/usr/kerberos/include conftest.c -lm -lbsd -lnsl -ldl -lgc

    のようである。一般ユーザで、このオプションをつけてコンパイルをしてみた。

    [toyota@kashyyyk]% gcc -o conftest -g -O2 -I./libwc -I/usr/kerberos/include conftest.c -lm -lbsd -lnsl -ldl -lgc

    [toyota@kashyyyk]% ./conftest

    ./conftest: error while loading shared libraries: libgc.so.1: cannot open shared object file: No such file or directory

    だそうだ。少しやってみたら、 gcc -lgc conftest.c ではこのエラーが起きて、

    gcc conftest.c では問題が起きないことがわかった。つまり、 Boehm GC の

    ライブラリに問題があるようである。 ldd でコンパイルしてできたバイナリを

    みてみた。

    [toyota@kashyyyk]% ldd ./conftest

            linux-gate.so.1 =>  (0x00149000)

            libm.so.6 => /lib/libm.so.6 (0x00a32000)

            libnsl.so.1 => /lib/libnsl.so.1 (0x0634b000)

            libdl.so.2 => /lib/libdl.so.2 (0x00a58000)

            libgc.so.1 => not found

            libc.so.6 => /lib/libc.so.6 (0x00906000)

            /lib/ld-linux.so.2 (0x008e8000)

    原因はわかったけど、どこを探しているか気になったので見てみた。

    [toyota@kashyyyk]% strace ./conftest

    open("/lib/tls/i686/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/lib/tls/i686/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/lib/tls/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/lib/tls/libgc.so.1", O_RDONLY)   = -1 ENOENT (No such file or directory)

    open("/lib/i686/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/lib/i686/libgc.so.1", O_RDONLY)  = -1 ENOENT (No such file or directory)

    open("/lib/sse2/libgc.so.1", O_RDONLY)  = -1 ENOENT (No such file or directory)

    open("/lib/libgc.so.1", O_RDONLY)       = -1 ENOENT (No such file or directory)

    open("/usr/lib/tls/i686/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/tls/i686/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/tls/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/tls/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/i686/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/i686/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/sse2/libgc.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

    open("/usr/lib/libgc.so.1", O_RDONLY)   = -1 ENOENT (No such file or directory)

    結構探しているみたい。原因と対策をまとめてみた。

    原因、Boehm GC のライブラリが見つからない。

    自分でコンパイルした人は、何も指定しないと /usr/local/lib にインストール

    されるのだけど、そのライブラリが見つからないのため、起きる。

    対策1、/usr/lib にリンクを張る

    やってみた。

    [toyota@kashyyyk]% ln -s /usr/local/lib/libgc.so.1.0.2 libgc.so.1

    これでうまくいった。

    対策2、Boehm GC を /usr/lib にインストールする。

    Boehm GC を configure するときに --prefix=/usr として make install する。

    面倒なので、試してない。

    対策3、LD_LIBRARY を指定してみる。

    bash 系だと

    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"

    LD_LIBRARY が設定されていない場合は。

    export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"

    な感じ。csh 系では。

    setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:/usr/local/lib"

    LD_LIBRARY が設定されていない場合は。

    setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

    これでもうまくいく。

    対策4、上記の

    export LDFLAGS='-Xlinker -rpath /usr/local/lib'

    を行う。

    どれかを行えば、良いはずである。

    第二篇,转自:http://hidekazu.dhs1.sst.ne.jp/pukiwiki/pukiwiki.php?w3m

        *  Eclipse

        * HTML

        * ソフト

        * Firefox

        * ハード

    2006-07-23

        * MEMO

    2006-07-21

        * MySQL

    2006-07-19

        * なんだこれ?

        * 開発日記

        * ログ

        * iアプリ

    今日の15件

        * Solaris10(20)

        * DotProject(14)

        * qmail(10)

        * PHP(10)

        * 開発日記(8)

        * Tomcat TIPS(8)

        * ハード(7)

        * Log4j(7)

        * JooReports(6)

        * ログ(6)

        * ソフト(6)

        * MySQL(6)

        * W-ZERO3(5)

        * JDK(5)

        * Apache(5)

    w3m

    テキストベースのWWWブラウザです。テキストだけあってはやい!

        * w3m

              o インストール

              o リンク

              o 参考書籍

              o コメント



    インストール

    http://w3m.sourceforge.net/からw3m-0.5.1.tar.gzをダウンロードしました。またこれでconfigureしますとエラーになったので、http://www.hpl.hp.com/personal/Hans_Boehm/gc/から、gc6.5.tar.gzをダウンロードしました。(gc6.4.tar.gzでも以前いけてました。)README.QUICKより

     tar xzvf gc6.4.tar.gz

     cd gc6.4

     ./configure --prefix=/usr/local

     make

     make check

     make install

    ではw3mです。

     ./configure

    あれ、まだエラーがでます。checking size of long long... configure: error: cannot compute sizeof (long long), 77 /etc/ld.so.confを見てみると

     include ld.so.conf.d/*.conf

    となっており、/etc/ld.so.conf.dの中に/usr/local/libを追加して、

     ldconfig

    としてから、

     make

     make install

    usr/local/bin/w3mにいました。doc-jpにマニュアルがありますので読んでみましょう。また 操作はkeymap.defaultを参考にしてみてください。あれ?CentOS4.1に入れて、何かキーを押すとセグメンテーション違反ですとでる....



    リンク



    参考書籍



    コメント

        * 同じくCentOS4.1でw3mが落ちるのに悩んでいます。私のところでは、なぜかrootでなら落ちずに動く。何でだろう。 -- nakajima? 2005-08-15 (月) 17:32:55

              o 貴重な情報ありがとうございます。私のところではrootでも落ちます...

        * 何が違うのでしょう。Fedora3のw3m-0.51-4とdagにあるRHEL4のlibgc6.2のRPMでもrootなら平気でした。今は自分でmakeしたw3m-CVS先端とlibgc6.5で、sudoして使ってます(笑) -- なかじま? 2005-08-16 (火) 19:36:55

              o 私もそれでちょっと試してみます。ありがとうございます。助かります。

        * そういえば私はSELinuxを無効化しているので動いているのかも。 -- なかじま? 2005-08-17 (水) 19:08:55

              o ありがとうございます。でもpermissiveで動かしていたりするんですね... とりあえずFC3のftp://rpmfind.net/linux/fedora/core/updates/3/i386/w3m-0.5.1-4.FC3.1.i386.rpmをインストールしたらrootでいけました。

    お名前:

    另外,记录一个相关的网址,上面的两篇文章都是这个网址上的:http://d.hatena.ne.jp/ir9Ex/20060630

  2. 在redhat linux9.0中安装了w3m后可以正常显示网页了,但是不能显示图片。经过重新执行./configure,在其中的显示信息中发现,系统中缺少几个图形方面的库,好像包括:glib, gtk+, imlib, imlib2, gdk-pixbuf等。

    在redhat linux9.0安装光盘中安了gtk+,其它的是从网上搜索来的,安上后,可以显示图片了。

    在单位上的ubuntu6.0.6中仍然是安装了w3m仍然不能显示图片,估计是同样的道理。

    另外,我在搜索的时候,发现有个好像叫着rpmfind.com的网站的各种各样的rpm格式的软件都有,关于w3m的就有w3m*.rpm和w3m-img*.rpm,也许用这两个文件安装就可以正常显示图片了?

Comments are closed.