gpt4 book ai didi

c - 共享库 : Why muliple versions of GLIBC_ in a single binary

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:47 26 4
gpt4 key购买 nike

上下文:我目前正在调试一个问题,即在一台机器上生成的二进制文件(与 lpthread 类似)在另一台机器上尝试时会导致与 pthread 相关的错误。

libtest.so 是一个共享库,似乎包含多个版本的 GLIBC_。这是预期的吗?它是怎么发生的?它是使用“-shared -lpthread -fPIC -soname=xxxx”选项链接的。

$objdump -T libtest.so | grep GLIBC_

...
00000000 DF *UND* 0000008d GLIBC_2.1 popen
...
00000000 DF *UND* 0000002c GLIBC_2.0 syslog
00000000 DF *UND* 00000020 GLIBC_2.0 pthread_exit
00000000 DF *UND* 0000009f GLIBC_2.0 __xstat
00000000 DF *UND* 000000bb GLIBC_2.3.2 pthread_cond_signal
00000000 DF *UND* 000000c9 GLIBC_2.0 vsprintf
...

最佳答案

每个符号都有自己的历史。

当符号未被修改(签名、行为)时,它会保留默认版本,例如。 GLIBC_2.0。修改的符号归因于当时库的当前版本,例如在 GLIBC_2.1 中修改了 popen() 行为,在 GLIBC_2.3.2 中修改了 pthread_cond_signal()。

您的程序会链接到每个符号的最新版本。版本被记录下来,如果您针对较新的 GLIBC 运行程序,您的程序将不会使用较新的符号版本,而是使用链接时可用的版本:这确保在运行时具有预期的行为:不足为奇。

关于c - 共享库 : Why muliple versions of GLIBC_ in a single binary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139122/

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