4

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 をリンクするときにシンボルのバージョン管理を禁止できますか?

4

1 に答える 1

1

そのため、に比べて弱いシンボルではなく、デフォルトの実装に弱いエイリアスを使用しましたNULL。何らかの理由で、リンク時にシンボルバージョンがglibcからプルされていないことがわかりました。

于 2011-05-26T13:25:23.107 に答える