Article delegate-ja/389 of [1-453] on the server localhost:7119
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[Reference:<_A388@delegate-ja.ML_>]
Newsgroups: mail-lists.delegate-ja

[DeleGate-Ja] Re: Delegateのコンパイル環境と稼働環境が異なる場合
10 Feb 2010 22:09:14 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project

In message <_A388@delegate-ja.ML_> on 02/10/10(13:51:44)
you 野村 真路 <pk4aqbrv6-au47wksucm6o.ml@delegate.org> wrote:
 |お世話になっております。野村です。
...
 |Delegate のコンパイル環境(gccコンパイラにて)と
 |稼働環境(gccコンパイラ 未)が異なり、
 |稼働環境にはコンパイル環境時のライブラリが存在しない場合、
 |稼働環境にて、Delegateを正常起動させる方法は、
 |どのような方法がございますでしょうか。

一般的に、

1) 使用するライブラリを組み込む(静的にリンクする)
 ○何処へ持っていっても動く
 ×実行ファイルは大きくなる
 ×静的ライブラリが用意されてない場合がある
 ×組み込み配布が著作権上許可されてない場合がある

2) 必要な動的ライブラリを実行環境上に用意する
 ○実行ファイルは自体小さくて済む
 ×動的ライブラリがないと動かない
 ×root権限で/libやら/usr/libをいじらないといけない

のどちらかかと思います。

どのような動的ライブラリが必要とされているかは、通常実際に実行した時の
エラーメッセージ等に表示されると思います。参照されるライブラリの一覧を
見る方法はOSによって異なりますが、例えばLinuxでは、以下のような感じです。

    % ldd src/delegated
            linux-gate.so.1 =>  (0x00ae9000)
            libnsl.so.1 => /lib/libnsl.so.1 (0x0022e000)
            libdl.so.2 => /lib/libdl.so.2 (0x0046b000)
            libutil.so.1 => /lib/libutil.so.1 (0x06063000)
            libpthread.so.0 => /lib/libpthread.so.0 (0x00471000)
            libpam.so.0 => /lib/libpam.so.0 (0x00795000)
            libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x02000000)
            libc.so.6 => /lib/libc.so.6 (0x002fd000)
            /lib/ld-linux.so.2 (0x002df000)
            libaudit.so.0 => /lib/libaudit.so.0 (0x007a3000)
            libm.so.6 => /lib/libm.so.6 (0x00442000)
            libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x020ed000)
    
    % ls -l src/d*d
    -rwxr-xr-x 1 yutaka yutaka 4172668 Feb 11 06:13 src/delegated
    % size src/d*d
       text    data     bss     dec     hex filename
    3774073   60580  245000 000000X  3e4125 src/delegated
    % file src/d*d
    src/delegated: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

全てのライブラリを静的にリンクしてしまう方法は、OSによりますが、リンカの
オプションとして -Bstatic とか -static とか指定します。
そのためには、src/DELEGATE_CONF の中に、
LDOPTS=-static -Bstatic
などと書きます。ただ、これはうまくいかない場合があり、またバイナリがかなり
大きくなります。

一方、問題のライブラリだけ静的にリンクするには、ライブラリの指定を -lxxx の
かわりに、/path/of/libxxx.a のように、静的ライブラリを指定してやる方法が
あります。
例えば libstdc++.so.6 を動的に参照しないようにするとします。在処を調べると、

    % find /usr -ls | grep stdc++.a
    1444305 1976 -rw-r--r--   1 root     root      2011770 May 27  2008 /usr/lib/gcc/i386-redhat-linux/4.1.1/libstdc++.a

ということなので、これを使用することにします。
デフォルトでのmakeをしてできる src/Makefile.go の中から、参照されている
ライブラリを調べます。

    % grep ^NETLIB= src/Makefile.go
    NETLIB=-lnsl -ldl -lutil -lpthread -lpam -lstdc++

そこで、src/DELEGATE_CONF の中に、-lstdc++ の代わりに

    NETLIB=-lnsl -ldl -lutil -lpthread -lpam /usr/lib/gcc/i386-redhat-linux/4.1.1/libstdc++.a

などと書いて、makeします。すると、以下のようになります。

    % ldd src/delegated
            linux-gate.so.1 =>  (0x00c03000)
            libnsl.so.1 => /lib/libnsl.so.1 (0x0022e000)
            libdl.so.2 => /lib/libdl.so.2 (0x0046b000)
            libutil.so.1 => /lib/libutil.so.1 (0x06063000)
            libpthread.so.0 => /lib/libpthread.so.0 (0x00471000)
            libpam.so.0 => /lib/libpam.so.0 (0x00795000)
            libc.so.6 => /lib/libc.so.6 (0x002fd000)
            /lib/ld-linux.so.2 (0x002df000)
            libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x020ed000)
            libaudit.so.0 => /lib/libaudit.so.0 (0x007a3000)
    % ls -l src/d*d
    -rwxr-xr-x 1 yutaka yutaka 4218871 Feb 11 07:06 src/delegated
    % size src/d*d
       text    data     bss     dec     hex filename
    3809802   62672  261000 000000X  3f152a src/delegated
    % file src/d*d
    src/delegated: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux

                   9 9  
┌─┐┬┌──┬┐ //\^^ ( e ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_<   >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V