【问题标题】:Is it possible to build a single executable Perl program that will run on a variety of platforms?是否可以构建一个可以在各种平台上运行的可执行 Perl 程序?
【发布时间】:2011-09-13 21:01:47
【问题描述】:

我有一个我编写的 Perl 脚本,可以使用 pp (PAR) 编译它。我很好奇是否可以制作一个完全可移植的可执行文件(在 linux 和 windows 上运行),或者我是否必须创建 2 个可执行文件(一个用于 linux,一个用于 windows)。我对使用 perlapp 或 perl2exe 的选项不感兴趣,我在这里严格寻找 PAR/pp 选项。此外,我不是在寻找 PAR 创建 .par 文件并为操作系统品种预先部署存根 Perl 环境的能力。

编辑:

当对构建在我的 linux 系统上的二进制文件运行 file 命令时,它显示二进制文件属于以下类型:

% file my_app
my_app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped.

这似乎表明它只能在 linux 系统上运行。

【问题讨论】:

  • linux和windows的可执行文件格式不同
  • @yi_H 是的,但是这些格式是否相互不兼容?
  • 是的,这些格式相互不兼容。

标签: perl executable par


【解决方案1】:

不可能构建一个可以在各种平台上运行的单一可执行文件,因为它们的二进制文件使用不同的格式。

【讨论】:

  • 谢谢,我有点认为是这种情况,但我想我会要求得到一个明确的答案。我假设因为 PAR/pp 构建了一个特定于平台的二进制文件,它们在不同的操作系统/平台组合之间是不兼容的。
  • 我不认为完全不可能,但它会非常困难。 ELF 标头将取代 PE 格式中的 DOS 存根。位置 0x3c 必须特定于 PE 格式。从那里开始,交错 ELF 块和 PE 块将是一件简单的事情。我怀疑任何一个块都可以起到双重作用。这意味着可执行文件的大小最终会是原来的两倍。
  • @Brad Gilbert,Linux 如何找到 ELF 标头?它了解PE吗? (我不是在质疑你所说的,只是想弄清楚它是如何工作的。)
  • ELF 标头位于文件的开头。 PE 文件在开始时有一个 DOS 存根。当 Windows 查看 PE 文件时,它会忽略存根。相反,Windows 在位置 0x3C 处查找地址,该地址指向 PE 标头。这意味着 PE 标头可以在文件中的任何位置。基本上只要ELF头不干扰0x3C,就有可能。我会说这远非可行。您可能需要做很多工作才能让其他格式忽略这些块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多