【问题标题】:Linux "cross-compilation" for different GLIBC version不同 GLIBC 版本的 Linux“交叉编译”
【发布时间】:2021-01-15 11:18:31
【问题描述】:

我的工作配置是我有基于 Ubuntu-20 的开发工作站(确切地说是 Linux Mint 20.1),我在其中为 Ubuntu 18 开发应用程序。当我编译简单的 C 或 C++ 程序时,将其上传到目标机器并运行,我接收消息:

./test: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ./test)
./test: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./test)

我可以强制程序链接到旧版本吗?如果有关系,我会使用 gcc 9。

【问题讨论】:

  • 可能最简单的方法是在 Docker 容器或虚拟机中为旧版本的 Ubuntu 设置构建环境。容器更可取,因为它们对系统内存的浪费较少。

标签: c++ c linux glibc


【解决方案1】:

规范的解决方案是使用 debootstrap 为目标版本创建一个 chroot 环境,如下所示:

debootstrap --variant=buildd --arch amd64 bionic ~/bionic_chroot

并用

激活那个chroot

chroot ~/bionic_chroot

并在 chroot 中进行编译。请参阅例如here 了解更多详情。

【讨论】:

  • 我是否还必须安装另一份编译器、cmake 和其他开发工具?
  • 由于使用了 `--variant=buildd' 选项,需要安装一些开发所需的包(如 gcc、make、...),但您的项目的开发依赖项需要安装,就像您在原始系统上所做的那样。而且你需要将你的源代码副本复制到 chroot 中,或者在激活 chroot 之前复制它,或者在 chroot 环境中安装 git,然后克隆源代码树。
猜你喜欢
  • 2011-05-20
  • 2014-07-03
  • 2019-05-26
  • 2017-02-11
  • 2014-12-19
  • 2016-11-18
  • 2016-03-20
  • 2021-07-08
  • 1970-01-01
相关资源
最近更新 更多