我第一次尝试使用多个文件构建程序。 我从来没有遇到过使用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)。 谢谢
答案 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