在Hurd的信号实施工作中,我遇到了以下问题。
基本上,我向glibc添加了一个新函数,它由libpthread使用(来自Hurd的不同来源)。为了使新的libpthread仍然可以使用旧的glibc,我将新函数声明为libpthread代码中的弱符号。 (参见补丁here。)
当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是新引入的符号的版本。
我正在寻找的结果是新符号为NULL 当glibc没有它时, 当我使用较旧的glibc构建libpthread时会发生什么。
知道怎么解决这个问题吗? 链接libpthread时,我可以禁止对符号进行版本控制吗?
答案 0 :(得分:0)
所以我在默认实现中使用弱别名
与NULL
相比,而不仅仅是弱符号,
结果出于某种原因
符号版本不会在链接时从glibc中拉出来。