找出可执行文件中的哪些符号正在创建对不需要版本的glibc的依赖。
$ objdump -p myprog...Version References: required from libc.so.6: 0x09691972 0x00 05 GLIBC_2.3 0x09691a75 0x00 03 GLIBC_2.2.5$ objdump -T myprog | fgrep GLIBC_2.30000000000000000 DF *UND* 0000000000000000 GLIBC_2.3 realpath
查看附属库中的内容,以查看是否可以链接较旧版本的任何符号:
$ objdump -T /lib/libc.so.6 | grep -w realpath0000000000105d90 g DF .text 0000000000000021 (GLIBC_2.2.5) realpath000000000003e7b0 g DF .text 00000000000004bf GLIBC_2.3 realpath
我们很幸运!
从
GLIBC_2.2.5您的代码中请求版本:
#include <limits.h>#include <stdlib.h>__asm__(".symver realpath,realpath@GLIBC_2.2.5");int main () { realpath ("foo", "bar");}观察到不再需要GLIBC_2.3:
$ objdump -p myprog...Version References: required from libc.so.6: 0x09691a75 0x00 02 GLIBC_2.2.5$ objdump -T myprog | grep realpath0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 realpath
有关更多信息,请参见http://web.archive.org/web/20160107032111/http://www.trevorpounds.com/blog/?p=103。



