Pagina 1 di 1

[C++] errore in compilazione

Inviato: sab 13 dic 2008, 18:17
da kernel89
Ciao a tutti.
Come da titolo non riesco a compilare un codice sorgente in c++ costruito con dei moduli.
Vi faccio un esempio del codice (molto banale):

Codice: Seleziona tutto

// file princ.cpp
#include <iostream>
#include "intero.h"

int main(){
      int x=2;
      scrivi(x);
}

// file intero.h
void scrivi(int x);

// file intero.cpp
#include <iostream>
#include "intero.h"

void scrivi(int x){
    cout << x ;
}

Il codice che ho scritto sopra è tutto giusto, però quando compilo il file princ.cpp

Codice: Seleziona tutto

g++ princ.cpp
mi restituisce:

Codice: Seleziona tutto

/tmp/ccyTbTpC.o: In function `main':
princ.cpp:(.text+0x195): undefined reference to `scrivi(int)'
collect2: ld returned 1 exit status
Penso che io debba dare al compilatore delle direttive, ma non ho idea di quali siano!

Qualcuno/a mi può aiutare?

Grazie a tutti!

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 18:32
da JohnnyMnemonic

Codice: Seleziona tutto

// file princ.cpp
#include <iostream>
#include "intero.h"
int main(){
      int x=2;
      scrivi(x);
}

Codice: Seleziona tutto

// file intero.h
void scrivi(int x);

Codice: Seleziona tutto

// file intero.cpp

#include <iostream>
#include "intero.h"
using namespace std;
void scrivi(int x){
    cout << x ;
}

Codice: Seleziona tutto

g++ princ.cpp intero.h
Nota la modifica in intero.cpp

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 19:05
da m0rdr3d
Temo non sia così semplice.

Per compilare due moduli è necessario che questi siano compilati separatamente.
Quindi prima devi compilare intero.cpp con il flag -c, necessario quando si compila un sorgente che non contiene un main

Codice: Seleziona tutto

g++ -c intero.cpp
Il risultato di questa compilazione è un file intero.o, che devi utilizzare per compilare print.cpp

Codice: Seleziona tutto

g++ print.cpp intero.o
Ovviamente non è molto comodo compilare a mano ciascun modulo ogni volta, per questo si utilizza solitamente il makefile che automatizza la procedura.

L'errore che ti dà g++ è sollevato dal linker, che vede che è stata dichiarata una funzione scrivi (perchè lo vede in intero.h) ma non riesce a trovarne l'implementazione.

P.S.: la correzione di JonnyMnemonic ad intero.cpp resta comunque valida e necessaria

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 19:06
da JohnnyMnemonic
Si ovviamente sarebbe buona cosa avere un makefile per queste cose, visto che gestiscono un pò tutti gli aspetti della compilazione

Era solo una soluzione quick&dirty

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 19:09
da m0rdr3d
JohnnyMnemonic ha scritto:Si ovviamente sarebbe buona cosa avere un makefile per queste cose, visto che gestiscono un pò tutti gli aspetti della compilazione

Era solo una soluzione quick&dirty
Scusami, ti assicuro che non voglio fare il saccente, ma utilizzando

Codice: Seleziona tutto

g++ princ.cpp intero.h
come suggerivi, il compilatore non vede comunque l'implementazione della funzione scrivi.
Per lo meno ho provato (di fretta, lo ammetto) e non ha risolto il problema.

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 19:19
da targzeta
m0rdr3d ha scritto:...Per compilare due moduli è necessario che questi siano compilati separatamente.
Quindi prima devi compilare intero.cpp con il flag -c, necessario quando si compila un sorgente che non contiene un main

Codice: Seleziona tutto

g++ -c intero.h
Il risultato di questa compilazione è un file intero.o, che devi utilizzare per compilare print.cpp

Codice: Seleziona tutto

g++ print.cpp intero.o
...
Non è vero che bisogna compilarli separatamente, puoi anche darli tutti e due al g++:

Codice: Seleziona tutto

g++ intero.cpp print.cpp
Il problema nell'invocazione di JohnnyMnemonic è che ha passato un file .h al compilatore che non c'entra niente. Del resto anche il tuo comando per compilare il file intero.o credo sia un errore di digitalizzazione perchè mi sembra troppo grossolano.

Spina

Re: [C++] errore in compilazione

Inviato: sab 13 dic 2008, 19:21
da JohnnyMnemonic
In effetti mi ero sbagliato a scrivere, era

Codice: Seleziona tutto

g++ princ.cpp intero.cpp
così l'ho provato e funziona

Tranquillo comunque, ammetto senza problemi che di c++ so quasi nulla, sono giusto un pochino più preparato sul C

[risolto] [C++] errore in compilazione

Inviato: sab 13 dic 2008, 22:20
da kernel89
ok ,grazie per le risposte.
Ho fatto come ha suggerito JohnnyMnemonic e funziona.

Grazie di nuovo.

ciao! :D

Re: [C++] errore in compilazione

Inviato: lun 15 dic 2008, 1:20
da m0rdr3d
spina ha scritto:Del resto anche il tuo comando per compilare il file intero.o credo sia un errore di digitalizzazione perchè mi sembra troppo grossolano.Spina
Ops, vero :roll:
Chiedo scusa, come dicevo, la fretta mi ha mal consigliato.
Scusa anche a JohnnyMnemonic per non aver capito.

P.S.: correggo lo srafalcione nel mio primo post per evitare che qualcuno in fututo trovi informazioni sbagliate.