Cygwin二进制文件执行格式错误。

3
我有一个脚本文件,是在Windows下使用Cygwin运行的。当我尝试使用此文件时,我会得到以下错误:

-bash:/sigdet/filename:无法执行二进制文件:Exec格式错误。

sigdet是Cygwin目录中包含脚本的文件夹。Rawdata是包含脚本应该分析的原始数据文件的目录的名称。

为了解决这个问题,我已经更改了文件权限,并确保它在64位机器上,并且脚本似乎已经在64位机器上编译过。经过这些步骤后,我不知道还有什么问题。以下是我输入的命令:

我首先改变了目录,如下所示:

$ cd /sigdet/

然后我运行了应该工作的脚本:

$ /sigdet/filename -i rawdata

这个脚本文件是否需要在Windows中添加扩展名?我尝试将其更改为.sh扩展名,但没有成功。有人告诉我对其他Windows机器而言,它就像现在一样工作。

感谢任何能帮忙的人。


该文件受版权保护,因此很遗憾我无法上传那些信息。 - StructuralEquationModel
3个回答

4
  1. 您的文件不是可执行文件。它很可能包含了为Linux操作系统设计的ELF可执行文件,或者它已经损坏了。
  2. 如果您的文件是一个shell脚本,或者实际上包含纯文本的任何内容,那么您将会得到不同的错误(例如,“期望命令名称”或“未知命令:XYZ”等)
  3. 脚本不应该有文件扩展名,就像任何可执行文件一样。另一方面,它们应该有shebangs:位于第一行的小文本,告诉系统解释器的路径。例如,一个Python可执行脚本可以被命名为whatever,并在第一行中有#!/usr/bin/python3或类似的内容。当您通过./whatever在shell中运行它时,它将在/usr/bin中查找python3,并像这样运行您的文件:/usr/bin/python3 ./whatever。(事实上,由于这个你还可以指定传递给解释器的其他参数。)

还有一种可能,就是您的脚本是有效的,但它包含了指向错误解释器的shebang。如果是这种情况,那么最有可能路径是正确的,否则您将得到/whatever/interpreter: bad interpreter: no such file or directory或类似的错误。但是,所有其他点都适用于解释器(它只是另一个可执行文件...)

如果脚本和/或解释器是为Windows或Cygwin至少执行而设计的,则应该包含前面提到的shebang(第一行中的#!/path),或者它应该是Windows可执行文件(在这种情况下,文件数据应该以MZ字母开头,您可以在记事本中检查它)。如果不是,那么意味着您得到的文件不能在Cygwin上运行。


谢谢您快速回复,rr-。我在记事本中打开了该文件,它以ELF开头。这是否意味着除非我使用Linux,否则我无法运行该脚本? - StructuralEquationModel
是的,那正是情况。 - rr-

1

我曾经遇到过同样的问题。在makefile的顶部添加以下内容:

export ARCH = CYGNUS

在make过程中发生的事情是创建了Linux和Windows版本的可执行文件。你只需要使用./.exe版本即可。


1
在我的情况下,当我使用错误的命令编译C程序时,出现了错误。当我使用正确的命令时:
gcc myprog.c -o myprog.exe

错误已解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接