在 Hurd 中处理信号实现时,我遇到了以下问题。
基本上,我向 glibc 添加了一个新函数,该函数由 libpthread 使用(它们来自 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 时可以禁止符号的版本控制吗?