Hurd でシグナルの実装に取り組んでいるときに、次の問題に遭遇しました。
基本的に、libpthread で使用される新しい関数を glibc に追加します (これらは Hurd の別のソースからのものです)。新しい libpthread が古い glibc でも動作するように、新しい関数を libpthread コードで弱いシンボルとして宣言します。(こちらのパッチを参照してください。)
libpthread が古い glibc でビルドされている場合、すべてがインデントどおりに機能します。ただし、ビルド時にシンボルが実際に glibc で見つかった場合、リンカーは新しいシンボルのバージョンに対応する「VERNEED」を発行し、古い glibc で実行すると次のようになります。
foo: ./libc.so.0.3: version `GLIBC_X.Y' not found
(required by /lib/libpthread.so.0.3)
ここで、GLIBC_X.Y は新しく導入されたシンボルのバージョンです。
私が探している結果は、新しいシンボルが glibc にないときに NULL になることです。これは、古い glibc で libpthread をビルドしたときに起こることです。
これを修正する方法はありますか?libpthread をリンクするときにシンボルのバージョン管理を禁止できますか?