Errore di collegamento con gcc
Domanda
Non ho provare a compilare questo codice:
#include <iostream>
#include <cstdlib>
using namespace std;
#define ARRAY_TAM 2
typedef int (*operacion)(int, int);
typedef const char* (*Pfchar)();
int suma(int, int);
int resta(int, int);
const char* descrSuma();
const char* descrResta();
const char* simbSuma();
const char* simbResta();
class OP
{
private:
public:
operacion op;
Pfchar descr;
Pfchar simb;
};
int main (int argv, char *argc[])
{
OP ArrayOP[ARRAY_TAM];
ArrayOP[0].op = suma;
ArrayOP[0].descr = descrSuma;
ArrayOP[1].op = resta;
ArrayOP[1].descr = descrResta;
int op1, op2;
unsigned int i;
char opcion;
bool fin = false;
while (fin != true)
{
cout << "CALCULADORA" << "\n";
cout << "===========" << "\n";
for (i = 0; (i < ARRAY_TAM); i++)
{
cout << i+1;
cout << ".- ";
cout << ArrayOP[i].descr() << "\n";
}
cout << i+1 << ".- " << "Salir" << endl;
cout << "Opcion: ";
cin >> opcion;
opcion = atoi(&opcion);
opcion--;
cout << (int)opcion << endl;
if ((opcion >= 0) && (opcion < ARRAY_TAM))
{
cout << "Operando 1: ";
cin >> op1;
cout << "Operando 2: ";
cin >> op2;
cout << "Resultado: op1 " << ArrayOP[opcion].simb()
<< " op2 = " << ArrayOP[opcion].op(op1, op2);
}
else if (opcion == ARRAY_TAM)
{
fin = true;
}
}
return 0;
}
int suma (int op1, int op2)
{return op1 + op2;}
int resta (int op1, int op2)
{return op1 - op2;}
const char* descrSuma()
{return "Suma";}
const char* descrResta()
{return "Resta";}
const char* simbSuma()
{return "+";}
const char* simbResta()
{return "-";}
Un funziona, ma ho un sacco di problemi di collegamento con gcc con i simboli debbugging e non è così link: - (
Hai bisogno di assistenza!
Grande errore del linker:
facon @ facon-laptop: ~ / Windows - Mis documentos / Prog / C / Ejercicios / pedirentero $ g ++ -o principale main.o main.o: In funzione `_Start ':
/build/buildd/eglibc-2.10.1/csu /../ sysdeps / i386 / Elf / start.S: 65: Definizione multiplo di `_start '
/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o: /build/buildd/eglibc-2.10.1/csu /../ sysdeps / i386 / Elf / start.S: 65:
prima definito qui main.o :( Rodata + 0x0):. multipla definizione di `_fp_hw '
./usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( Rodata + 0x0): prima definito qui main.o: In funzione
_fini': (.fini+0x0): multiple definition of
_fini '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( Fini + 0x0).: prima definito qui main.o :( Rodata + 0x4):. multipla definizione di `_IO_stdin_used '
/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( rodata.cst4 + 0x0).: prima definito qui main.o: In funzione
__data_start': (.data+0x0): multiple definition of
__data_start '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( dati + 0x0).: prima definito qui main.o: In funzione
.__data_start': (.data+0x4): multiple definition of
__dso_handle ':( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtbegin.o dati + 0x0): prima definito qui main.o: In funzione
_init': (.init+0x0): multiple definition of
_init '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( init + 0x0).: prima definito qui
.:( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtend.o dtors + 0x0): Definizione multiplo di ` DTOR_END ' main.o :( dtors + 0x4):. prima definito qui
/ usr / bin / ld: avvertimento: Impossibile creare .eh_frame_hdr sezione, --eh-frame-hdr ignorato. / Usr / bin / ld: errore nel main.o (.eh_frame); no verrà creato .eh_frame_hdr tavolo.
collect2: ld returned 1 exit status
PD:. A cura
Soluzione
Si scrive "... funziona", ma poi si scrive "... problemi con il collegamento".
Sono po 'confuso con questa domanda, perché:
- Se ci sono problemi con il collegamento allora non funziona ...
- Ma se funziona, allora non hanno problemi con il collegamento ...
Quindi penso che vuoi dire: "si compila, ma ci sono errori di collegamento"
?Se questo è il caso, allora si potrebbe provare
g++ -g main.cpp -o main
anziché
gcc -g main.cpp -o main
EDIT: ... e fare non menzionare main.o sulla riga di comando =;)
EDIT:? Se che tutto non aiuta - forse c'è qualcosa che non va con il vostro g ++ / installazione gcc
su ubuntu riprova
sudo aptitude install build-essential
Altri suggerimenti
Hai usato gcc
invece di g++
?
Se gcc
viene utilizzato con il codice C ++ che vi darà gli errori di collegamento strani. codice C ++ deve essere compilato con g++
.
Modifica :. Sulla base delle nuove informazioni che hai fornito vedo che si sta eseguendo g++ -o main main.o main.o
Si dovrebbe invece funzionare: g++ -o main main.cpp