如何链接到特定的glibc版本?

当我在Ubuntu Lucid 10.04 PC上编译东西时,它会与glibc链接。Lucid使用glibc

2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 …

据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗?

在我的具体用法中,我尝试为ARM编译gcc跨工具链。

回答:

您是正确的,因为glibc使用符号版本控制。如果你是好奇,符号版本实施的glibc

2.1介绍介绍这里是太阳的符号版本方案中描述的扩展这里。

一种选择是静态链接您的二进制文件。这可能是最简单的选择。

您也可以在chroot构建环境中构建二进制文件,或使用glibc- new => glibc - old 交叉编译器来构建二进制文件。

根据http://www.trevorpounds.com博客文章

,只要使用相同的 .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("%s\n", resolved);

return 0;

}

以上是 如何链接到特定的glibc版本? 的全部内容, 来源链接: utcz.com/qa/429597.html

回到顶部