Erreur de lien avec gcc
Question
J'ai essayer de compiler ce code:
#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 il fonctionne, mais j'ai beaucoup de problèmes de la liaison avec gcc avec des symboles de debbugging et il n'a pas le lien: - (
Besoin d'aide!
Grande erreur de liens:
Facon @ Facon-laptop: ~ / Windows - Mis documentos / Prog / C / Ejercicios / pedirentero $ g ++ main.o -o principal main.o: En fonction `_Start ':
/build/buildd/eglibc-2.10.1/csu /../ sysdeps / i386 / Elf / start.S: 65: définition multiple de `_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:
d'abord défini ici main.o :( Rodata + 0x0). multiple définition de `_fp_hw '
./usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( Rodata + 0x0): d'abord défini ici main.o: En fonction
_fini': (.fini+0x0): multiple definition of
_fini '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( + 0x0 fini).: d'abord défini ici main.o :( Rodata + 0x4). multiple définition de `_IO_stdin_used '
/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( rodata.cst4 + 0x0).: d'abord défini ici main.o: En fonction
__data_start': (.data+0x0): multiple definition of
__data_start '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crt1.o :( données + 0x0).: d'abord défini ici main.o: En fonction
.__data_start': (.data+0x4): multiple definition of
__dso_handle ':( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtbegin.o données + 0x0): d'abord défini ici main.o: En fonction
_init': (.init+0x0): multiple definition of
_init '/usr/lib/gcc/i486-linux-gnu/4.4.1 /../../../../ lib / crti.o :( + 0x0 initialisation).: d'abord défini ici
.:( /usr/lib/gcc/i486-linux-gnu/4.4.1/crtend.o dtors + 0x0): définition multiple de ` DTOR_END main.o :( dtors + de 0x4):. Tout d'abord défini ici
/ usr / bin / ld: Avertissement: Impossible créer .eh_frame_hdr section, --eh-frame-hdr ignoré. / Usr / bin / ld: erreur dans main.o (.eh_frame); non .eh_frame_hdr table sera créée.
collect2: ld a renvoyé 1 état de sortie
PD:. Edité
La solution
Vous écrivez « ... ça marche », mais vous écrivez « ... problèmes de liaison ».
Je suis peu confus avec cette question, parce que:
- S'il y a des problèmes avec lien puis ne fonctionne pas ...
- Mais si cela fonctionne, alors vous n'ont pas problèmes de relier ...
Je suppose que vous voulez dire: « il compile, mais il y a des erreurs de liaison »
?Si tel est le cas, alors vous pouvez essayer
g++ -g main.cpp -o main
au lieu de
gcc -g main.cpp -o main
EDIT: ... et faire pas mentionner main.o sur la ligne de commande =;)
EDIT: Si tout ne vous aide pas - peut-être il y a quelque chose de mal avec votre g ++ / Installation gcc
sur ubuntu s'il vous plaît essayer
sudo aptitude install build-essential
Autres conseils
Avez-vous utilisé gcc
au lieu de g++
?
Si gcc
est utilisé avec le code C ++, il donnera des erreurs de liaison étranges. Le code C de doit être compilé avec g++
.
EDIT :. Sur la base de la nouvelle information fournie je vois que vous exécutez g++ -o main main.o main.o
Vous devriez plutôt exécuter: g++ -o main main.cpp