Errore sistematico in un programma c++

Kekkonen
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.

Risposte
apatriarca
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.

claudio862
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.

Kekkonen
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;
}

claudio862
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).

Kekkonen
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.

Kekkonen
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

claudio862
Continuo a non capire se vuoi usare C o C++.

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).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.