4

在 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 时可以禁止符号的版本控制吗?

4

1 回答 1

1

因此,我对默认实现使用了弱别名,而不仅仅是与 相比的弱符号NULL,并且由于某种原因,事实证明在链接时没有从 glibc 中提取符号版本。

于 2011-05-26T13:25:23.107 回答