如何创建可以在现代发行版的旧系统上运行的可执行文件?

如何创建可以在现代发行版的旧系统上运行的可执行文件?

通常,即使旧程序(从 Linux 内核版本 2.4 的系统复制)也只是在现代 Linux 系统上运行文件,除非它们依赖于大量库或使用框架。

如果复制到旧系统,新程序(通常甚至int main(){return 0;})通常无法运行。

如何在现代系统上制作此类动态链接的可执行文件?我不想在 chroot 或虚拟机中设置旧系统。是否可以对旧库进行“交叉编译”?

答案1

在单独的环境(chroot 或 VM)中设置旧系统是最简单的方法。 (在 Debian 下,schroot 和 debootstrap 使这变得简单;参见如何在 64 位 Debian/Ubuntu 上运行 32 位程序?

可以对旧库版本进行交叉编译:“简单地”安装这些旧库的开发包,并将编译器指向它们。您可能需要重新编译编译器本身以适应较旧的标准库。困难在于正确安装和配置所有开发包。你需要:

  1. 编译一个旧的标准库。
  2. 编译库 A,将编译器指向.a上一步中生成的标头和文件。 (对于 gcc,传递-nostdinc-nostdinc++选项;其他编译器通常具有类似的标志。)
  3. 沿着依赖链重复此操作,直到编译完程序。

相关内容