- ベストアンサー
libm.so.2: open に失敗しました
- Solaris10(SunStudio12.1)でビルドしたAPを、Solaris8で実行しようとしたら、下記のエラーが出て実行できません。
- Solaris8のマシンの/usr/libには、libm.so.1はありますが、libm.so.2はありません。Solaris10のマシンには両方あります。
- (2)Solaris8のマシンに存在するlibm.so.1で動作してくれないものかと思っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> やはりビルド時点でライブラリのバージョンは固定されてしまうものなのでしょうか? 固定されます。ライブラリのDT_NEEDEDに書き込まれているでしょう。 バイナリエディタなどで libm.so.2 という文字列が確認できるはずです。 どうしてもと言われるなら、バイナリエディタでその文字列を libm.so.1 に書き換えることです。 書き換えた後のバイナリは Solaris 10 では動作しないことに注意してください。 ただし、繰り返しますがライブラリのメジャーバージョンが違うと言うことは ライブラリの互換性がないことをベンダーが主張しているものです。 それは予期せぬ結果を招くリスクがあるということをご理解ください。 Solaris 10 の libm.so.2 を Solaris 8 にコピーするわけにも行かないでしょうから、 そのようなケースに出くわした場合、通常はlibm を静的リンクします。
その他の回答 (1)
- entree
- ベストアンサー率55% (405/735)
Solaris 8上で libm.so.2 -> libm.so.1 のシンボリックリンクを作成すれば 動作させることができると思いますが、 # ln -s libm.so.1 /usr/lib/libm.so.2 ライブラリのメジャーバージョンが違うということは一般的には互換性が ないことを意味します。なので、安定動作を期待するなら Solaris 8 上で 再リンクする必要があります。
お礼
ご回答、有難うございます。 ご提案下さったシンボリックリンク案もいいと思いました。 ただ、Solaris8のマシンはクライアントとして使っていて複数あるため、 できればクライアント側は変更しないで済ませたいです。 やはりビルド時点でライブラリのバージョンは固定されてしまうものなのでしょうか? なお、Solaris10のマシンはサーバで、このマシンでAPのビルドを行い、 NIS+ユーザのホームにAPプログラムを配置しています。 クライアントからNIS+ユーザのホームに置いてある APのクライアントプログラムを実行する構成を取っています。 今回、サーバマシンだけを Solaris8 から Solaris10 に更新しようとして、 この問題に突き当たっています。
お礼
再度のアドバイス、有難うございます。 ビルド時点でライブラリのバージョンは固定されてしまうものなのですね。 分かりました。 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 のシンボリックリンクを作成」は、 取り敢えず動きました。 有難うございました。