2011-05-26 76 views
2

在Hurd中处理信号实现时,我遇到了以下问题。如何在使用弱符号时避免依赖于GLIBC_X.Y

基本上,我添加了一个新函数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是新引入的符号的版本。

我正在寻找的结果是,当glibc没有它的时候,新的符号是NULL ,当我用老的glibc编译libpthread时会发生这种情况。

任何想法如何解决这个问题? 链接libpthread时,我可以禁止我的符号的版本?

+0

你有没有解决这个问题?我想我有[相关的问题](http://stackoverflow.com/questions/39744926/how-can-i-compile-a-rust-program-so-it-doesnt-use-cxa-thread-atexit -impl) – Timmmm 2016-09-28 15:50:26

回答

0

所以我用一个弱别名的默认实现 ,而不是只是一个弱符号相比NULL, 以及由于某种原因,原来 在链接时的符号版本没有从glibc的拉入。