我发现了一些有关此错误的未解决问题,但都没有相关性。
我在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
答案 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
很好。