AWS:无法执行二进制文件

Posted

技术标签:

【中文标题】AWS:无法执行二进制文件【英文标题】:AWS : cannot execute binary file 【发布时间】:2014-12-04 22:10:45 【问题描述】:

我的服务器是 Amazon Linux AMI 64bits (2014.09-release-notes)

我编译了一个用 C++ 编码的程序(安装了gcc48-c++.x86_64):

[root@ip-***-**-**-*** waveform_generator]# make
Compiled    [src/main.cpp] >> [src/main.o]
Compiled    [src/File.cpp] >> [src/File.o]
Compiled    [src/AGenerator.cpp] >> [src/AGenerator.o]
Compiled    [src/GeneratorSVG.cpp] >> [src/GeneratorSVG.o]
Compiled    [src/GeneratorCanvas.cpp] >> [src/GeneratorCanvas.o]
Compiled    [src/GeneratorPNG.cpp] >> [src/GeneratorPNG.o]
Compiled    [src/Header.cpp] >> [src/Header.o]
Compiled    [src/pngwriter.cpp] >> [src/pngwriter.o]
Built       [wfgen]

现在,当我执行编译后的文件“wfgen”时,控制台会返回此消息:

[root@ip-***-**-**-*** waveform_generator]# bash wfgen
wfgen: wfgen: cannot execute binary file

环境:

[root@ip-***-**-**-*** waveform_generator]# uname -i
x86_64
[root@ip-***-**-**-*** waveform_generator]# file wfgen
wfgen: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=2e7c881c6fc10f12cdf49402edae1cc36b8d77a0, not stripped

你有解决我问题的办法吗?

非常感谢:)

最大。

【问题讨论】:

能否请您停用彩色输出并重新运行make?真的很难读懂那里发生的事情。 好吧,没关系 :) 我删除了颜色代码 好多了。 :) 我也冒昧地删除了标签。 【参考方案1】:

当你输入时

[root@ip-***-**-**-*** waveform_generator]# bash wfgen

我认为 bash 期望 wfgen 是一个 shell 脚本。相反,您可以在提示符处直接键入程序名称

[root@ip-***-**-**-*** waveform_generator]#./wfgen

【讨论】:

是的,你可能适合解释 shell 脚本......但我直接尝试./wfgenwfgen,我绝对没有回报! @maxsennin 对不起,我没有得到你。它会在终端上打印什么吗? @maxsennin:如果没有得到输出,执行./wfgen ; echo $?会得到什么? 另外,./wfgen --help 给你什么? 我对@9​​87654327@ 和./wfgen ; echo $?return 有任何意见1【参考方案2】:

看起来编译很顺利,file 命令的输出看起来不错。我不知道 Makefile 里有什么,但我猜它也应该没问题。

我不太了解你的环境,所以我在这里猜测一下:如果其他一切正常,但你仍然收到 cannot execute binary file 错误,那么可能是因为你的文件系统挂载了noexec 选项。

要检查是否是这种情况,请运行mount,然后确定当前目录在哪个挂载点下,并检查是否为此挂载点设置了noexec 挂载选项。

如果确实是noexec 问题,您有两种选择:

    重新挂载不带noexec 选项的文件系统。如果您希望这是永久的,请不要忘记编辑/etc/fstab。 (但请注意,noexec 的存在可能是有原因的。确保可以删除它。) 如果它只是一个二进制文件,请将其移至没有noexec 限制的文件系统并从那里尝试。一个好地方是/usr/local/bin 目录(或/usr/local/sbin,如果它是一个管理工具。)

【讨论】:

当我运行mount 时,没有“noexec”的迹象。我尝试在 /usr/local/bin 中移动文件“wfgen”,结果相同...:/ 啊,我现在看到您正在尝试使用 bash 执行文件。这当然行不通,因为它是二进制文件。您需要 chmod +x 二进制文件,然后使用 ./wfgen 调用它(正如 Sayu 建议的那样)。应该是这样的。 你的意思是像chmod 0777 / NOOOO,不是0777,尤其不是/。 (幸好如果没有-R 标志,它将无法工作,否则您将使您的整个系统对任何人都是可读/可写/可执行的。)一个简单的chmod 755 filename应该做。要了解有关文件权限的更多信息,请阅读catcode.com/teachmod Woups ^^ Okey... 我尝试了同样的结果,我什么都没有:/

以上是关于AWS:无法执行二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 上的 FFmpeg 转码导致无法使用(静态)音频

sh 将AWS RDS二进制文件备份到AWS S3

Valgrind 错误 - 无法执行二进制文件

./abc.o:无法执行二进制文件:执行格式错误

bin/python3:无法执行二进制文件:执行格式错误

无法执行二进制文件centos?