Errore sistematico in un programma c++
Per qualsiasi tipo di programma,anche il più semplice,come ad esempio stampare la stringa "ciao" il compilatore mi da questo errore,non so più cosa fare...
[Linker error] undefined reference to `__dyn_tls_init_callback'
[Linker error] undefined reference to `__cpu_features_init'
ld returned 1 exit status
Grazie a tutti per la cortese attenzione.
[Linker error] undefined reference to `__dyn_tls_init_callback'
[Linker error] undefined reference to `__cpu_features_init'
ld returned 1 exit status
Grazie a tutti per la cortese attenzione.
Risposte
Ma su quale sistema stai lavorando? Con quale compilatore (gcc?) e con quali opzioni? Puoi mostrare un esempio di codice da te scritto che mostra tale problema? Immagino che il problema possa essere nella non corretta configurazione configurazione dei tool di sviluppo.
A occhio stai compilando un sorgente C++ con il comando "gcc source.cpp", usa invece "g++ source.cpp". Altrimenti mi accodo nella richiesta di altre informazioni.
Vi incollo un esempio di programma sul quale mi da errore. Considerate che quando compilo non mi da errore su nessuna riga ma solo quelle tre stringhe che ho scritto nel primo messaggio.
#include
#include
#include
main()
{
int integer1, integer2, sum;
printf("inserisci il primo numero\n");
scanf("%d", &integer1);
printf("inserisci il secondo numero\n");
scanf("%d", &integer2);
sum = integer1 + integer2;
printf("Il risultato è %d\n", sum);
system("pause");
return 0;
}
#include
#include
#include
main()
{
int integer1, integer2, sum;
printf("inserisci il primo numero\n");
scanf("%d", &integer1);
printf("inserisci il secondo numero\n");
scanf("%d", &integer2);
sum = integer1 + integer2;
printf("Il risultato è %d\n", sum);
system("pause");
return 0;
}
Quei due sono errori del linker. Il sorgente viene compilato senza problemi, ma il linker non riesce a trovare la definizione di quelle due funzioni. Visto che quelle sono funzioni dell'implementazione potrebbe essere che l'installazione del compilatore sia danneggiata. Che compilatore usi (immagino GCC o MinGW)? Come l'hai installato?
Qualche nota sul sorgente che hai postato.
- In C++ gli header di sistema non hanno estensione .h, quindi #include. Quelli ereditati dal C hanno anche prefisso c, quindi #include , #include .
- Non usi nessuna funzione dell'header iostream, quindi perché lo includi?
- La funzione main() deve restituire un int, quindi int main() {...}.
- In generale, quello sembra un sorgente C, non C++ (tolta l'inclusione di iostream).
Qualche nota sul sorgente che hai postato.
- In C++ gli header di sistema non hanno estensione .h, quindi #include
- Non usi nessuna funzione dell'header iostream, quindi perché lo includi?
- La funzione main() deve restituire un int, quindi int main() {...}.
- In generale, quello sembra un sorgente C, non C++ (tolta l'inclusione di iostream).
come compilatore uso MinGw 32.
Non riesco ad eseguire nemmeno un programma di questo tipo:
#include
main ()
{
printf ("Benvenuto in c");
system("pause");
return 0;
}
non mi da nessun errore nella compilazione ma come al solito le tre stringhe che vi ho scritto sopra.
Non riesco ad eseguire nemmeno un programma di questo tipo:
#include
main ()
{
printf ("Benvenuto in c");
system("pause");
return 0;
}
non mi da nessun errore nella compilazione ma come al solito le tre stringhe che vi ho scritto sopra.
variando alcune opzioni nella compilazione, in questo programma:
#include
#include
main ()
{
printf("Ciao\n");
system("PAUSE");
return 0;
}
la compilazione non mi da errori ma mi visualizza: cannot find -lobjc
#include
#include
main ()
{
printf("Ciao\n");
system("PAUSE");
return 0;
}
la compilazione non mi da errori ma mi visualizza: cannot find -lobjc
Continuo a non capire se vuoi usare C o C++.
C:
Compila con:
C++:
Compila con:
Come hai installato MinGW? Da dove l'hai preso? In che directory è installato? Che comando usi per compilare?
Prova ad aggiungere esplicitamente al PATH il percorso di MinGW, potrebbe esserci un'altra installazione incompleta usata da altri programmi installati.
Controlla anche che sia la versione che hai scaricato tu con "gcc --version", esempio (io ho la 4.6.3):
Eventualmente disinstalla MinGW e scarica questa versione. La estrai in una directory (es. C:\mingw) ed aggiungi la sottodirectory "bin" al PATH (come prima "set PATH=C:\mingw\bin;%PATH%" prima di compilare).
C:
#include <stdio.h> // per printf() #include <stdlib.h> // per system() int main() { printf("Hi!"); system("pause"); return 0; }
Compila con:
gcc -std=c99 prova.c -o prova.exe
C++:
#include <iostream> // per std::cout e std::endl #include <cstdlib> // per std::system() int main() { std::cout << "Hi!" << std::endl; std::system("pause"); return 0; }
Compila con:
g++ -std=c++98 prova.cpp -o prova.exe
Come hai installato MinGW? Da dove l'hai preso? In che directory è installato? Che comando usi per compilare?
Prova ad aggiungere esplicitamente al PATH il percorso di MinGW, potrebbe esserci un'altra installazione incompleta usata da altri programmi installati.
set PATH=C:\path\to\mingw\bin;%PATH% g++ -std=c++98 prova.cpp -o prova.exe
Controlla anche che sia la versione che hai scaricato tu con "gcc --version", esempio (io ho la 4.6.3):
gcc (GCC) 4.6.3 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Eventualmente disinstalla MinGW e scarica questa versione. La estrai in una directory (es. C:\mingw) ed aggiungi la sottodirectory "bin" al PATH (come prima "set PATH=C:\mingw\bin;%PATH%" prima di compilare).