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

当我在我的 Ubuntu Lucid 10.04 PC 上编译某些东西时,它会链接到 glibc。 Lucid 使用 2.11 的 glibc。当我在另一台装有旧 glibc 的 PC 上运行此二进制文件时,命令失败,说没有 glibc 2.11...

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

在我的具体使用中,我尝试为 ARM 编译一个 gcc 交叉工具链。

最佳答案

glibc 使用符号版本控制是正确的。如果你好奇,glibc 2.1 中引入的符号版本控制实现描述为 here并且是 Sun 的符号版本控制方案的扩展,描述为 here .

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

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

根据http://www.trevorpounds.com博文Linking to Older Versioned Symbols (glibc) ,只要使用用于定义的相同 .symver 伪操作有效,就可以强制将任何符号链接(symbolic link)到较旧的符号首先是版本化的符号。以下示例摘自 blog post .

以下示例使用 glibc 的真实路径,但确保它与旧的 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;
}

https://stackoverflow.com/questions/2856438/

相关文章:

python - 安装pycurl时出现"Could not run curl-config: [E

shell - 如何将文本 append 到文件?

python - 在 Python 脚本中,如何设置 PYTHONPATH?

python - isinstance ('aaa' , basestring) 和 isinsta

python - 为什么我们不应该在 py 脚本中使用 sys.setdefaultencoding

python - 如何以正确的方式平滑曲线?

linux - 确保只有一个 Bash 脚本实例正在运行的最佳方法是什么?

linux - 如何使用 Red Hat Linux 上的标准工具随机化文件中的行?

python - virtualenv和pyenv是什么关系?

linux - CURL 用于访问需要从其他页面登录的页面