g ++输出:文件无法识别:无法识别文件格式

时间:2013-06-15 17:58:50

标签: gcc build g++ makefile

我第一次尝试使用多个文件构建程序。 我从来没有遇到过使用main.cpp编译程序的任何问题。 使用以下命令,结果如下:

$ g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o
$ g++ -c src/CExprPart.cpp src/CExprPart.h -o src/CExprPart.o
$ g++ -c src/CExpr.cpp src/CExpr.h -o src/CExpr.o
$ g++ -c src/main.cpp -o src/main.o
$ g++ src/CNumber.o src/CExprPart.o src/CExpr.o src/main.o -o execprogram
src/CNumber.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

什么可能导致这样的错误,我该怎么办呢? 使用Linux Mint和gcc(Ubuntu / Linaro 4.7.2-2ubuntu1)。 谢谢

3 个答案:

答案 0 :(得分:25)

这是错误的:

 g++ -c src/CNumber.cpp src/CNumber.h -o src/CNumber.o

你不应该“编译”.h文件。这样做会创建预编译的头文件,这些文件不用于创建可执行文件。 以上应该只是

 g++ -c src/CNumber.cpp -o src/CNumber.o

类似于编译其他.cpp文件

答案 1 :(得分:24)

我在构建内容时遇到了这个错误 - 结果是由于先前的构建在将源文件编译为.o文件时失败 - 该.o文件不完整或已损坏,所以当我尝试另一个构建时在该文件上给出了此错误。解决方案只是删除.o文件(或运行make clean,如果你有一个包含该目标的makefile)。

(这与原帖后问题没什么关系,但这是Google搜索错误的第一次点击之一,所以只需在此处添加)。

答案 2 :(得分:-1)

尝试将以下所有文件放在一个目录中:

example.cpp:

#include<iostream>
#include<string>

#include "my_functions.h"

using namespace std;

int main()
{
    cout << getGreeting() << "\n";

    return 0;
}

my_functions.cpp:

#include<string>
using namespace std;

string getGreeting()
{
    return "Hello world";
}

my_functions.h:

#ifndef _MY_FUNCTIONS_H
#define _MY_FUNCTIONS_H

#include<string>
using namespace std;

string getGreeting();

#endif

然后发出以下命令:

$ g++ example.cpp my_functions.cpp -o myprogram
~/c++_programs$ ./myprogram
Hello world