您是正确的,因为glibc使用符号版本控制。如果你是好奇,符号版本实施的glibc
2.1介绍介绍这里是太阳的符号版本方案中描述的扩展这里。
一种选择是静态链接您的二进制文件。这可能是最简单的选择。
您也可以在chroot构建环境中构建二进制文件,或使用glibc- new => glibc - old 交叉编译器来构建二进制文件。
根据http://www.trevorpounds.com博客文章
链接到较旧版本的符号(glibc)
,只要使用相同的 .symver
伪
指令
就可以强制将任何符号
链接到较旧的符号
,只要该符号有效-
op,用于首先定义版本化符号。以下示例摘自博客文章。
以下示例利用了glibc的realpath,但确保将其链接到较旧的2.2.5版本。
#include <limits.h>#include <stdlib.h>#include <stdio.h>__asm__(".symver realpath,realpath@GLIBC_2.2.5");int main(){ const char* unresolved = "/lib64"; char resolved[PATH_MAX+1]; if(!realpath(unresolved, resolved)) { return 1; } printf("%sn", resolved); return 0;}


