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 脚本......但我直接尝试./wfgen
或wfgen
,我绝对没有回报!
@maxsennin 对不起,我没有得到你。它会在终端上打印什么吗?
@maxsennin:如果没有得到输出,执行./wfgen ; echo $?
会得到什么?
另外,./wfgen --help
给你什么?
我对@987654327@ 和./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:无法执行二进制文件的主要内容,如果未能解决你的问题,请参考以下文章