私は一般的なシナリオを持っています: いくつかの標準ライブラリといくつかのユーザー ライブラリに依存する実行可能ファイルのいくつかのソース ファイル。すべてのユーザー ライブラリは実行可能ファイルに静的にリンクされますが、標準ライブラリは動的にリンクされます。
問題: 完全なパッケージ (既にユーザー ライブラリ コード + 共有標準ライブラリを含む実行可能ファイル) に複数のシンボルが定義されていると思います。リンカーは明らかにそれに対する洞察を持っていますが、私が理解しているように、リンカーは複数の強い名前のシンボルに遭遇しない限り文句を言いません。コードを solaris 8/sparc プラットフォームから solaris10/sparc プラットフォームに移行しているときに、いくつかの標準の UNIX 関数がユーザー ライブラリに実装されているため、実行時にアプリがクラッシュするのではないかと心配しています。アプリケーションは、solaris 8/sparc プラットフォームで正常に動作することに注意してください。
私は奇妙な問題に直面しており、これが原因である可能性があると信じるようになりました
- あるライブラリの 1 つの変数を変更すると、別のライブラリの別の変数の値が変更されます
- Solaris 8-10: host2ip 変換の問題
必要なもの:
複数定義されたすべてのシンボルを簡単にリストする方法はありますか?- ユーザー ライブラリに由来する複数定義されたすべてのシンボルを簡単に一覧表示する方法はありますか?
- 問題 #1 はリンクの問題が原因であると思いますか、それとも他の問題の兆候であると思いますか?
Edit1:それ以来、ldを使用してマップファイルを生成すると、標準ライブラリ呼び出しのように見える名前を見つけるために、複数定義されたシンボルのセクションがあることがわかりました。知らない人のために説明すると、リンカーは、同じ名前の複数のシンボルが見つかり、名前が厳密な名前である場合にのみリンクに失敗します。