gpt4 book ai didi

c - dlsym(RTLD_NEXT, "msgctl") 不返回默认版本

转载 作者:太空狗 更新时间:2023-10-29 15:38:57 24 4
gpt4 key购买 nike

如果库定义了同一符号的多个版本,dlsym(RTLD_NEXT, "symbol") 会返回较旧的符号,即使较旧的符号不是默认符号也是如此。

例如libpthread定义了两个版本的pthread_cond_broadcast:

$:> nm -g /lib64/libpthread-2.15.so|grep pthread_cond_broadcast
000000000000bfc0 T pthread_cond_broadcast@@GLIBC_2.3.2
000000000000c310 T pthread_cond_broadcast@GLIBC_2.2.5
  • “GLIBC_2.3.2”是您在与 libpthread 链接时获得的默认版本(不涉及任何 dlsym)。 (注意表示默认符号的“@@”)
  • “GLIBC_2.2.5”是旧版本

现在,如果我使用 dlsym(RTLD_NEXT, "pthread_cond_broadcast"),我总是得到 GLIBC_2.2.5 版本而不是 GLIBC_2.3.2 版本。当然可以使用 dlvsym 来获取默认版本,但是如果需要对大量符号执行此操作并且其中许多符号具有不同的新/旧版本,这会变得很复杂。

我明白 RTLD_NEXT 不应该总是返回最新的符号以保持兼容性,但为什么不返回默认符号?

有人知道这背后的原理吗?

最佳答案

这已被报告为 glibc 错误:

据我所知,还没有修复。

关于c - dlsym(RTLD_NEXT, "msgctl") 不返回默认版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com