• ベストアンサー

2つのマシンでコンパイルしたldd結果の違いを無くしたい

1台が SUNW Ultra-ENTERPRISE もう1台が SUNW,Ultra-30 で同じソース(mainのみのソースコード)をコンパイルし、lddコマンドを実行してみると SUNW,Ultra-30の方に /usr/platform/SUNW,Ultra-30/lib/libc_psr.so.1 というのが出てきてしまいます。 これを取り除きたいのですが、何をすれば良いのでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

それは Solaris for SPARC の ldd の仕様なのか、実際にリンクされているのかは分かりませんが、いずれの場合にしても取り除くことはできません。 $ ldd /usr/lib/libc.so を実行してみれば分かるかと思います。libc にリンクされないプログラムは存在しないので、少なくとも、これに依存しているライブラリを ldd の結果から外すことはできません。

ari_els
質問者

お礼

了解しました。 とりあえず、この差は出てもしかたがないということになりました。 ありがとうございました。

その他の回答 (2)

回答No.2

ダイナミックリンクのエラーというか障害は見つけるのが難しいのですよね。 疑うのは2系間のシステムディレクトリのデータ差異や環境変数の差異でしょうか。 MakeのログについてDiffをとってみたらいかがでしょうか。リンクの所だけで十分だと思います。 間違っていたらご容赦

ari_els
質問者

お礼

とりあえず、この差は出てもしかたがないということになりました。 ありがとうございました。

回答No.1

static link すればいいんじゃないでしょうか。但し作られるバイナリはライブラリの一部を含むため少し大きくなります。 static link の指定方法はコンパイラによって違うと思います。(昔の Sun 純正の C コンパイラでは -static でした。gcc も -static のようです。他のコンパイラについては私は知りません)。

ari_els
質問者

お礼

アドバイスありがとうございます。 試しに本物のソースに対してstatic linkにしてやってみましたがコンパイルが通らなくなってしまいました。元々ダイナミックリンクをしているので、その辺に影響があるみたいです。なので、この方法は無理みたいです。 lddの結果で気になったのですが、 普通 AAA.so.1 => /usr/lib/AAA.so.1 と => かでると思うのですが、 /usr/platform/SUNW,Ultra-30/lib/libc_psr.so.1 は =>がありません。最後にこれが出てくるだけなのです。 こんな感じ。 >ldd test AAA.so.1 => /usr/lib/AAA.so.1 →出てきて正しいもの /usr/platform/SUNW,Ultra-30/lib/libc_psr.so.1 →何故か出てくる > どういう事なんでしょうかね・・・

関連するQ&A