【问题标题】:C++ cannot execute binary fileC++ 无法执行二进制文件
【发布时间】:2016-05-19 00:00:28
【问题描述】:

我刚刚使用 g++ 编译了我的源代码:

g++ -o exec Test.hpp

这不会生成可执行文件,即使我使用 chmod 使其可执行,我也会收到此错误。

bash: ./exec: cannot execute binary file: Exec format error

这是我的来源:

#include <iostream>

class Test {

  void main() {
    std::cout << "testing" << std::endl;
  }
};

我正在使用 Manjaro,它不是虚拟机。 有什么建议吗?

【问题讨论】:

  • 问题是在哪里你编译的?
  • Test.hpp的内容是什么?将头文件作为主程序翻译单元是很不寻常的。
  • file ./exec 显示什么?
  • @Barmar ./exec: C++ 的 GCC 预编译头文件(版本 014)
  • 它只是一个带有打印“hello”的主函数的类。我只是做了这个类来进行测试,因为我正在处理一个项目但我无法为其生成可执行文件

标签: c++ linux gcc header-files


【解决方案1】:

GCC 通过扩展名识别文件的内容/类型,“.hpp”被假定为头文件(1)。编译头文件会生成一个预编译的头文件,它是二进制且不可执行的。

解决方法是将文件重命名为“.cpp”(2)或添加“-x c++”

g++ -o exec Test.cpp
g++ -o exec -x c++ Test.cpp

(1)见https://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_3.html#SEC5“对于任何给定的输入文件,文件名后缀决定了进行何种编译:”

(2) 或 .cc、.cp、.cxx、.cpp、.c++ 或 .C 中的任何一个,参见 (1)

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 2013-08-04
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多