[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:20132] Re: OS-Versionとプログラムの互換性
-
From:KOJIMA Mitsuhiro
-
Date:Sat, 9 Aug 2003 07:58:40 +0900 (JST)
- Subject: [plamo:20132] Re: OS-Versionとプログラムの互換性
- From: KOJIMA Mitsuhiro <kojima@xxxxxxxxxxx>
- Date: Sat, 09 Aug 2003 07:58:41 +0900 (JST)
こじま@何とか台風は通りすぎたかな,です.
From: "H.Shiozaki" <sios_hs@yahoo.co.jp>
Subject: [plamo:20130] OS-Versionとプログラムの互換性
Date: Sat, 9 Aug 2003 00:08:59 +0900
> 以上の前提で,質問ですが
> Q1) このバージョンが異なれば動作しない理由をもっと理解したいのですが。
> (glibc関連とは想像していますが。)
カーネルヘッダを読み込んでその定義を使ってどうこうするようなプログラム
なら分りませんが,多分,カーネルのバージョンではなく glibc2 のバージョ
ンの違いでしょう.
glibc2 の中にはバージョンによって仕様だか機能だかが違っている部分があ
るようで,それらのルーチンを使う場合は glibc2 のバージョンを付けて呼び
出しているようです.
作成されたバイナリ(実行ファイル)に nm を実行してみてどういうシンボルが
付いているかを調べてみれば
080cce70 B __ctype_b@@GLIBC_2.0
080cce60 B __ctype_tolower@@GLIBC_2.0
U __cxa_atexit@@GLIBC_2.1.3
080cb000 D __data_start
w __deregister_frame_info@@GLIBC_2.0
080a74c0 t __do_global_ctors_aux
0804a660 t __do_global_dtors_aux
w __dso_handle
U __errno_location@@GLIBC_2.0
U __fxstat@@GLIBC_2.0
w __gmon_start__
U __libc_start_main@@GLIBC_2.0
U __lxstat@@GLIBC_2.0
こういう感じで,glibc2 のバージョンに依存するシンボルが定義されている
部分があると思います.
上記の例だと GLIBC_2.0 以外に GLIBC_2.1.3 を使っている部分があるから,
このバイナリは glibc-2.0.x の環境では動かないことが分ります.
このように,バージョンの高い glibc2 な環境で作ったバイナリほど下位互換
性は低くなる,という問題ではないでしょうか.
# でも,その場合は "Symbol not found" なエラーになって,Seg.Fault には
# ならなかった気もするなぁ,,
> Q2)例えば,Linux-2.2.17で開発した実効ファイル foo-lx22 は,
> Linux-2.2.16 から Linux-2.2.0 の環境での実効可能性は,
> どう考えれば良いのでしょうか?
これも多分カーネルのレベルではなく glibc2 のレベルで考える必要があるで
しょう.
> Q3) Q2に関連して,できる限り広く対応する為の対策法が有れば
> 教えて頂けないでしょうか?
> - - - -
> Q3 に関連して,コンパイルに -static スイッチをつければと考えるのですが。
> しかし,libc をスタチックにリンクしても,
> 1)もし,その処理がlibc内で閉じていれば効果があると思われるが,
> 2)もし,その処理の為に,カーネル迄アクセスする場合には,
> たまには,うまくいく場合もあるかもしれないが,一般的には,
> 例えば,linux-2.2.17のLibcはそのカーネルを使うように
> 構成されていると思われるので,そのlibcをスタチクリンクしても,
> linux-2.2.0での動作は,基本的には合わないような気がするのです。
> そのことを考えると,-static コンパイルオプションの意味が分からなくなっていま
> す。
最初にも述べましたが,カーネルヘッダを読み込んで,カーネルに定義されて
いるシンボルを使ってどうこうするようなプログラムの場合はカーネルのバー
ジョンに依存すると思いますが,そうでなければ -static で静的なバイナリ
を作ってしまえば,上記のような GLIBC_2.XX みたいなシンボルも解決できる
(全部くっつく)ので問題なくなるように思います.
--------
こじま
- Follow-Ups
-
- [plamo:20243] Re: OS-Versionとプログラムの互換性, H.Shiozaki
- References
-
- [plamo:20130] OS-Versionとプログラムの互換性, H.Shiozaki
[検索ページ]
[メール一覧]
Plamo ML 公開システム