[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:20130] OS-Versionとプログラムの互換性



汐崎 と申します。
Linux環境で,例えば foo.c をコンパイルしたところ,
添付ファイル linux-version-q1.htm(3.006kB)で示しています様に,
開発環境と動作環境で,Linuxのメージャ番号が異なる場合には,
開発環境より動作環境の方が,新しい場合は動作しますが,
逆の場合には,動作せず,この場合には,たしか,
Segmentation Fault というシステムからお叱りのメッセージを受けて
動作しません(表のX印のところ)。
- - - - -
添付ファイルの「注2)コンパイル方法」の追加説明を以下に記します。
gcc -O2 -o foo-lx__ foo.c libfoo-lx__.a -lm
1)ソースファイル foo.c は,共通に使用します。
2)libfoo-lx__.a の__には20, 22, 24 として,
  Linuxバージョン毎にコンパイルしたものを利用する。
3)libfoo.c はやはり共通に使用する。
4)libfoo.cには,例えば,sin(), cos()があり,そのために
 コンパイル方法には -lm を付けている。
- - - - -
以上の前提で,質問ですが
Q1) このバージョンが異なれば動作しない理由をもっと理解したいのですが。
  (glibc関連とは想像していますが。)
Q2)例えば,Linux-2.2.17で開発した実効ファイル foo-lx22 は,
  Linux-2.2.16 から Linux-2.2.0 の環境での実効可能性は,
  どう考えれば良いのでしょうか?
Q3) Q2に関連して,できる限り広く対応する為の対策法が有れば
  教えて頂けないでしょうか?
- - - -
Q3 に関連して,コンパイルに -static スイッチをつければと考えるのですが。
しかし,libc をスタチックにリンクしても,
1)もし,その処理がlibc内で閉じていれば効果があると思われるが,
2)もし,その処理の為に,カーネル迄アクセスする場合には,
  たまには,うまくいく場合もあるかもしれないが,一般的には,
  例えば,linux-2.2.17のLibcはそのカーネルを使うように
  構成されていると思われるので,そのlibcをスタチクリンクしても,
  linux-2.2.0での動作は,基本的には合わないような気がするのです。
そのことを考えると,-static コンパイルオプションの意味が分からなくなっていま
す。
- - -
以上ですが,宜しくお願いします。
(なお,添付のファイルの2番目の表は,完全ではありません。)
- - - - -
FM: 汐崎 廣義 < H.Shiozaki >
E-Mail: sios_hs@yahoo.co.jp


  
Title: linux-version-q1.htm

Jvs
@ JOSeXgF@CFOKC@XF@
OS Linux-2.4.19 Linux-2.2.17 Linux-2.0.35
Linux-2.4.19
Linux-2.2.17 X
Linux-2.0.35 X X
PFタt@C foo-lx24 foo-lx22 foo-lx20
QFRpC@ gcc -O2 -o foo-lx__ foo.c libfoo-lx__.a -lm i\[X foo.c j

OSO Linux-2.4.19 Linux-2.2.17 Linux-2.0.35
Distribution Name Plamo-3.0 Vine-2.1 Slackware-3.6
タt@C foo-lx24 foo-lx22 foo-lx20
gcc Version 2.95.3 20010315 @ @
glibc Version @ @ @
make Version 3.79.1 @ @
ld Version 2.12.91 20020723 @ @
@ @ @ @

Follow-Ups
[plamo:20132] Re: OS-Versionとプログラムの互換性, KOJIMA Mitsuhiro

[検索ページ] [メール一覧]
Plamo ML 公開システム