C++ プログラムでnmユーティリティを使用したことがある場合は、多くのシンボルが 'V' または 'W' として識別されることに気付いたでしょう。どちらも異なる種類の弱いシンボルです。
実行時に動的リンカーがそれらすべてを解決しようとするため、実行可能ファイルに大量の弱いシンボルがあるのは良くありません。実行可能ファイルをリンクするときに単純な規則を適用することで、多くの時間を節約できると考えていました。
- 実行可能ファイルで弱いシンボルが作成されるときはいつでも、そのようなシンボルにデフォルト値がある場合は、それを通常のシンボルに昇格させます。
次の理由から、このハックは安全だと思われます。
- いずれかのライブラリが同じ名前のウィーク シンボルを定義している場合、それは昇格されたものによってオーバーライドされます。
- ライブラリが実際にそのようなシンボルを定義していない場合...特別なことは何も起こりません
- ライブラリが実行可能ファイルで定義されていない弱いシンボルを定義している場合、すべてが通常どおり機能します。
これについて binutils 開発者と話し合う前に、私が見逃している大きな間違いはありますか?