プロが教える店舗&オフィスのセキュリティ対策術

教えて下さい。

Solaris10(SunStudio12.1)でビルドしたAPを、
Solaris8で実行しようとしたら、下記のエラーが出て実行できません。

「重大なエラー: libm.so.2: open に失敗しました: ファイルもディレクトリもありません。」

Solaris8のマシンの/usr/libには、libm.so.1はありますが、libm.so.2はありません。
Solaris10のマシンには両方あります。

(1)Solaris10でのビルド時に、libmをstaticリンクすることも考えたのですが、
OSに依存するライブラリだと思いますので、
(2)Solaris8のマシンに存在するlibm.so.1で動作してくれないものかと思っています。

(2)は可能でしょうか?どうすればできますでしょうか?
そもそも動的リンクなのに、ビルド時にライブラリのバージョンは固定されてしまうものなのでしょうか?
それぞれのマシンには /usr/lib/libm.so というシンボリックリンクがあり、
Solaris10ではlibm.so.2を、
Solaris8ではlibm.so.1を指しています。
バージョンに拘らずシンボリックリンク(libm.so)を使ってくれないものなのでしょうか?

宜しくお願い致します。

A 回答 (2件)

> やはりビルド時点でライブラリのバージョンは固定されてしまうものなのでしょうか?



固定されます。ライブラリのDT_NEEDEDに書き込まれているでしょう。
バイナリエディタなどで libm.so.2 という文字列が確認できるはずです。

どうしてもと言われるなら、バイナリエディタでその文字列を
libm.so.1 に書き換えることです。

書き換えた後のバイナリは Solaris 10 では動作しないことに注意してください。

ただし、繰り返しますがライブラリのメジャーバージョンが違うと言うことは
ライブラリの互換性がないことをベンダーが主張しているものです。
それは予期せぬ結果を招くリスクがあるということをご理解ください。

Solaris 10 の libm.so.2 を Solaris 8 にコピーするわけにも行かないでしょうから、
そのようなケースに出くわした場合、通常はlibm を静的リンクします。
    • good
    • 0
この回答へのお礼

再度のアドバイス、有難うございます。
ビルド時点でライブラリのバージョンは固定されてしまうものなのですね。
分かりました。

Solaris10でlibmのstaticリンクを試みましたがダメでした。
libm.aが存在していません。
libmだけでなく、/usr/lib,/libにはstaticのライブラリは全くありません。

ご回答No.1に書いて頂いた、Solaris8マシンでの再リンクを試してみます。
ただ、Solaris8で現コンパイラ(CC5.5)が使えるサーバマシンは今回廃棄予定なので、、、
困りました、、、

なお、残す予定のSolaris8のクライアントマシン上で、
新サーバ(Solaris10)に入れてある新コンパイラ(CC5.10)を使って再リンクを試してみましたが、
/usr/include/sys/ccompile.hがない等のメッセージが出るなど、
さすがに全くダメのようです。

ご回答No.1に書いて頂いた、
「Solaris 8上で libm.so.2 -> libm.so.1 のシンボリックリンクを作成」は、
取り敢えず動きました。
有難うございました。

お礼日時:2011/03/07 11:15

Solaris 8上で libm.so.2 -> libm.so.1 のシンボリックリンクを作成すれば


動作させることができると思いますが、

 # ln -s libm.so.1 /usr/lib/libm.so.2

ライブラリのメジャーバージョンが違うということは一般的には互換性が
ないことを意味します。なので、安定動作を期待するなら Solaris 8 上で
再リンクする必要があります。
    • good
    • 0
この回答へのお礼

ご回答、有難うございます。

ご提案下さったシンボリックリンク案もいいと思いました。
ただ、Solaris8のマシンはクライアントとして使っていて複数あるため、
できればクライアント側は変更しないで済ませたいです。

やはりビルド時点でライブラリのバージョンは固定されてしまうものなのでしょうか?


なお、Solaris10のマシンはサーバで、このマシンでAPのビルドを行い、
NIS+ユーザのホームにAPプログラムを配置しています。
クライアントからNIS+ユーザのホームに置いてある
APのクライアントプログラムを実行する構成を取っています。
今回、サーバマシンだけを Solaris8 から Solaris10 に更新しようとして、
この問題に突き当たっています。

お礼日時:2011/03/04 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!