G++ output: файл не распознан: формат файла не распознан

Я пытаюсь создать программу с несколькими файлами в первый раз. У меня никогда не возникало проблем с программой для комплимента только с 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). Спасибо вам

Ответы

Ответ 1

Это неправильно:

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

Вы не должны компилировать файлы .h. При этом создаются предварительно скомпилированные файлы заголовков, которые не используются для создания исполняемого файла. Вышеизложенное должно быть просто

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

Аналогично для компиляции других .cpp файлов

Ответ 2

Я столкнулся с этой ошибкой при построении чего-либо - это произошло из-за сбоя предыдущей сборки при компиляции исходного файла в файл .o - этот файл .o был неполным или поврежден, поэтому при попытке другой сборки выдает эту ошибку в этом файле.

Решением было просто удалить файл .o (или запустить make clean, если у вас есть make файл с этой целью).

(Это не имеет ничего общего с исходной проблемой публикации, но это был один из первых попаданий в поиске ошибки Google, поэтому просто добавьте его здесь).

Ответ 3

Попробуйте поместить все следующие файлы в один каталог:

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