如何链接到特定的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