【问题标题】:Compiled perl executable fails to run on Windows 7 (64 bit)编译的 perl 可执行文件无法在 Windows 7(64 位)上运行
【发布时间】:2012-02-05 16:33:05
【问题描述】:

我在 64 位 linux 内核上创建了一个 perl 脚本的可执行文件 (.exe)。它在这个环境中正确执行。

在 64 位 Windows 7 中运行可执行文件时,会显示以下错误消息:

此文件的版本与 Windows 的版本不兼容 你在跑。检查计算机的系统信息以查看 无论您需要 x86(32 位)还是 x64(64 位)版本的程序, 然后联系软件发行商。

鉴于源操作系统和目标操作系统都是 64 位,我不确定构建的体系结构是否是问题所在。是否有任何特殊注意事项可以使已编译的 perl 程序在 Windows 中正确执行?谢谢。

【问题讨论】:

  • 您是否使用 windows 目标进行编译?获取一个 linux ELF 二进制文件并将其重命名为“myapp.exe”是行不通的。
  • 嗨@MarcB。谢谢你的建议。不,我没有——你能告诉我如何为 Windows 目标编译吗?
  • @MarcB:顺便说一句,我是通过在 bash 中发出命令 pp -x -o out.exe in.pl 来编译的。
  • 这将编译一个 linux 可执行文件并将其命名为“out.exe”。它不会是 Windows PE 二进制文件,而是 Linux ELF 二进制文件,并且两者都不能在根本不同的操作系统之间移植。

标签: perl executable 32bit-64bit exe runtime-error


【解决方案1】:

可执行文件跨平台不兼容。它们只会在原始平台上运行,除非它们被显式交叉编译到不同的目标。这实际上就是我们使用解释语言的原因。您想要做的事情是不可能的,因为 Windows 和 Linux API、库以及几乎所有东西都完全不同。

这就是为什么您需要为 linux/windows/mac 下载不同版本的程序的原因。

【讨论】:

  • 非常感谢@Dan。我想现在我想这很明显(尽管我以前从未尝试过跨平台编译)。
  • +1 丹 FTW! @User001 如果您使用 Active State 编译器,则许可证包括适用于 Windows 和 Linux 的编译器。在这种情况下,只需在带有 Windows 版本的 Windows 机器上重新编译即可。
  • 谢谢@T.Rob。如果我使用 ActiveState 编译器,我不知道我这样做了。我通过发出以下命令在 debian 的 bash 终端上编译:pp -x -o out.exe in.pl。有没有一种简单的方法来指示编译器(在 linux 中)为 Windows 平台创建可执行文件?
  • 哈!好问题。我希望@MarcB 会回答,因为我采取了懒惰的方式并使用了在 Windows 上运行的本机编译器。我很幸运能够支付 Perl 开发工具包的费用,所以我从来不用处理交叉编译。
  • PAR/pp 根本不进行交叉“编译”。您必须在 Windows 机器上构建可执行文件。 PAR/pp 在那里工作得很好。我推荐 Strawberry Perl,但现在 ActivePerl 也一样好。
猜你喜欢
  • 2014-05-26
  • 2017-07-31
  • 2012-06-10
  • 2011-02-18
  • 2011-04-03
  • 2016-05-07
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多