【问题标题】:Ubuntu libc confuseUbuntu libc 混淆
【发布时间】:2020-10-14 10:54:12
【问题描述】:

我为 Ubuntu 开发了一个应用程序。我在 Ubuntu 0.04 64bit 上使用当前的 dev-esentials 编译它。我用 CPack 创建了一个包并发送给了朋友。 他得到了:

libm.so.6: version "GLIBC_2.29" not found
libc.so.6: version "GLIBC_2.27" not found
libm.so.6: version "GLIBC_2.29" not found
libc.do.6: version "GLIBC_2.28" not found

他在 Ubuntu 16 上。我在我的开发机器上安装了 glibc 2.31。所以我假设他的 Ubuntu 16 上缺少这个库? 我可以将它添加到包中,以便 Ubuntu 16 用户确实拥有所需的库吗?还是我必须用兼容性标志之类的东西来编译它?

【问题讨论】:

    标签: ubuntu gcc glibc libc


    【解决方案1】:

    我为 Ubuntu 开发了一个应用程序。我在 Ubuntu 20.04 64bit 上使用当前的 dev-esentials 编译它。我用 CPack 创建了一个包并发送给了朋友。

    这行不通。一般来说,您需要在您计划支持的操作系统的最低版本上开发您的二进制文件。

    这样做的选项是

    • 在虚拟机中构建
    • 在 docker 容器中构建
    • 内置chroot
    • 构建 Linux 到旧版 Linux 交叉编译器。

    我已经在我的开发机器上安装了 glibc 2.31。所以我假设他的 Ubuntu 16 上缺少这个库?

    是的:Ubuntu 16.04 附带 GLIBC-2.23,如果不升级整个发行版,就不可能(嗯,it's possible 但完全不平凡)安装更新的版本。

    我可以将它添加到包中,以便 Ubuntu 16 用户确实拥有所需的库吗?

    没有。您要添加的软件包将影响目标系统上的每个(动态链接)程序,并且(很有可能)会破坏该系统(这就是为什么发行版一开始就不会升级 GLIBC) .

    附: StackOverflow 上有很多“如何链接旧 GLIBC”的答案,但我找不到一个正确的答案。

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 2019-05-31
      • 2014-05-06
      • 2015-02-02
      • 2011-05-11
      • 2012-06-02
      相关资源
      最近更新 更多