30

I am trying to build program with multiple files for the first time. I have never had any problem with compliling program with main.cpp only. With following commands, this is the result:

$ 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

What could cause such error and what should I do with it? Using Linux Mint with gcc (Ubuntu/Linaro 4.7.2-2ubuntu1). Thank you

4

3 に答える 3

38

これは間違っています:

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

.h ファイルを「コンパイル」しないでください。これを行うと、実行可能ファイルの作成には使用されないプリコンパイル済みヘッダー ファイルが作成されます。上記は単に

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

他の .cpp ファイルのコンパイルについても同様

于 2013-06-15T18:22:37.460 に答える
0

次のすべてのファイルを 1 つのディレクトリに配置してみてください。

例.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
于 2013-06-15T18:16:18.177 に答える