2013-06-15 32 views
19

Sto provando a creare un programma con più file per la prima volta. Non ho mai avuto alcun problema con il programma compliant con solo main.cpp. con i seguenti comandi, questo è il risultato:output g ++: file non riconosciuto: formato file non riconosciuto

$ 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 

Che cosa potrebbe causare tale errore e che cosa dovrei fare con esso? Uso di Linux Mint con gcc (Ubuntu/Linaro 4.7.2-2ubuntu1). Grazie

+1

È un po 'strano includere i file di intestazione nelle righe di comando della compilazione in questo modo. –

+1

Hai ragione, questo è il problema. Grazie. – RuinerCZ

risposta

19

Questo è sbagliato:

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

non si dovrebbe "compilazione" file .h. In questo modo verranno creati file di intestazione precompilati, che non vengono utilizzati per creare un file eseguibile. Quanto sopra dovrebbe essere semplicemente

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

simile per compilare gli altri file cpp

+0

Quindi, per quanto ho capito, il costruttore è in grado di trovare questi file di intestazione da solo a causa delle direttive #include, giusto? – RuinerCZ

+0

@ user2489350 Sì. A seconda di dove si trovano. È possibile specificare percorsi aggiuntivi per cercare #include file con l'argomento -I per gcc/g ++ – nos

-2

Prova a mettere tutti i seguenti file in una directory:

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 

quindi emettere questi comandi:

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

Grazie per la risposta. Costruisce bene. Se uso solo ./myprogram invece della tua seconda riga, ottengo l'output corretto (ciao mondo) – RuinerCZ

17

ho incontrato questo errore nella costruzione di qualcosa - si è rivelato essere dovuto ad un accumulo precedente in mancanza durante la compilazione di un file sorgente su un file .o - il file .o era incompleto o corrotto, quindi quando ho provato un altro build ha dato questo errore su quel file. La soluzione era solo per eliminare il file .o (o eseguire make clean, se si dispone di un makefile con tale destinazione).

(Questo non ha molto a che fare con il problema post originale, ma questo è stato uno dei primi successi in una ricerca di Google per l'errore, quindi aggiungilo qui).

+1

Questo è quello che è successo a me – user3405291

+2

Risolto anche il mio problema. –

Problemi correlati