-bash:./a.out:无法执行二进制文件:Exec格式错误

时间:2018-07-17 09:59:47

标签: c++ bash compiler-errors g++

我发现了一些有关此错误的未解决问题,但都没有相关性。

我在VM上编写了最简单的C ++代码( Ubuntu 14.04.3 LTS %5的输出为sudo virt-what ):

z.cpp:

vmware

并使用#include <iostream> int main(){ std::cout << "hello world" << std::endl; return 0; } 进行编译。尝试致电g++ z.cpp时,我在Q说明中得到了错误,即:

  

-bash:./a.out:无法执行二进制文件:Exec格式错误

编译不太一样的C代码时:

q.c:

./a.out

使用#include <stdio.h> int main(){ puts("hello world"); return 0; } 没问题,gcc q.c的输出如预期的./a.out


这是我的"hello world"

dpkg --list | grep compiler

问题显然在g ++编译器中,因为由ii g++ 4:4.8.2-1ubuntu6 i386 GNU C++ compiler ii g++-4.8 4.8.4-2ubuntu1~14.04 i386 GNU C++ compiler ii gcc 4:4.8.2-1ubuntu6 i386 GNU C compiler ii gcc-4.8 4.8.4-2ubuntu1~14.04 i386 GNU C compiler ii hardening-includes 2.5ubuntu2.1 all Makefile for enabling compiler flags for security hardening ii libllvm3.5:i386 1:3.5-4ubuntu2~trusty2 i386 Modular compiler and toolchain technologies, runtime library ii libxkbcommon0:i386 0.4.1-0ubuntu1 i386 library interface to the XKB compiler - shared library 编译时运行良好的C代码(q.c)在由gcc编译时运行失败。但是,我不知道编译器中到底是什么错误


g++


已经回答了这个问题,但是为了问题的完整性,这是造成差异的最后一个难题(尽管我第一次发布Q时并没有考虑过对此进行检查):

file a.out = a.out: ELF 32-bit MSB  executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.10, not stripped

1 个答案:

答案 0 :(得分:2)

发现了问题...

g ++命令确实在制作32位应用程序(如file a.out的输出所示)。原因是我有一个我不知道的别名:

alias g++='/opt/Cross_Tools/powerpc-linux-gnu/bin/powerpc-linux-gnu-g++'

这使我的g++ z.cpp命令不使用实际的/usr/bin/g++,而是使用交叉编译器。使用make z进行编译时,a.out很好。