La build di QtCreator restituisce Collect2:ld ha restituito lo stato di uscita 1

StackOverflow https://stackoverflow.com/questions/1485239

  •  18-09-2019
  •  | 
  •  

Domanda

Durante la creazione di diversi progetti diversi in QtCreator, mi sono imbattuto nel seguente errore di compilazione:

collect2: ld returned 1 exit status

Dopo aver cambiato solo alcune cose (che non dovrebbero cambiare nulla di significativo nella build), scomparirà se è già apparso, o apparirà se non c'è.

Nel mio attuale programma per un progetto scolastico, sto cercando di compilare rock03.cpp.È l'unico file nella build e ha il metodo main().L'avevo appena eseguito con successo e sono tornato indietro per modificare l'ordine di alcuni if()Così, ora ricevo solo due avvisi rilevanti:

overriding commands for target 'rock03.o'

E

ignoring old commands for target 'rock03.o'

insieme all'errore in questione.

Qualcuno sa perché questo accadrebbe?Non riesco a riprodurre l'errore con ragionevole certezza e QtCreator non si lamenta di nulla prima della creazione.

Grazie

È stato utile?

Soluzione 10

Verifica del riquadro "la determinazione della produzione" rivela che il file .pro stava cercando di collegare lo stesso file cpp due volte.

Altri suggerimenti

Se l'unico errore messaggio è questo quello relativo linker, la ragione può essere che il programma è ancora in esecuzione e linker non può accedere al file binario. Assicurarsi che l'applicazione è stata interrotta o uccidere se ancora in esecuzione. QtCreator mai controlla se precedente esecuzione è stata interrotta prima della compilazione.

Questo succede a me, perché io faccio una dichiarazione nel file di intestazione, quindi eliminare la funzione nel file cpp e mi dimentico di cancellare il decleration nell'intestazione. Per esempio ...

 //header file
class CLASS : public Q_OBJECT
{
...
protected:
void mouseMoveEvent(QMouseEvent*);
}

//source file

void CLASS::mouseMoveEvent(QMouseEvent*e)
{
...
}
    //I'll delete this, then forget to delete "void mouseMoveEvent(QMouseEvent*);" in the header file

L'output del compilatore è veramente utile se si sta solo ottenere questo come un errore, ma il primo candidato è probabilmente che hai ancora il programma di uscita aperta, e non può scrivere nel file, perché questo' ll darvi un errore di collect2 solitaria come questo

Questo errore può verificarsi anche a causa di problemi con il collegamento, ad esempio, si è dimenticato di dichiarare alcune variabili statiche da file di intestazione direttiva using 'extern'.

Questo accade quando non si chiude la vostra applicazione principale (quindi l'eseguibile di uscita è ancora in esecuzione, ma senza alcuna finestra visibile). Un esempio:

int main() {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

Questa applicazione finisce bene quando si chiude la finestra principale, ma questo codice

int main() {
    QApplication a(argc, argv);
    QDialog w;
    w.exec();
    return a.exec();
}

non chiudere l'applicazione quando si chiude la finestra di dialogo (almeno per me).

Una soluzione è quella di creare sempre la finestra principale e assicurarsi che lo si chiude.

Nel mio caso si dichiarava la funzione virtuale chiara.

void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!

Nel mio caso, il problema erano i permessi delle cartelle. Controllare la finestra "Compile Output" è fondamentale per scoprire qual è esattamente il problema. (QtCreator è l'opposto di Visual Studio a questo riguardo, quindi ci vuole un po' per abituarsi.) Ho provato a impostare correttamente i permessi, ma dopo non sembrava funzionare, alla fine ho disattivato shadow build e poi sono andato a "Strumenti/Opzioni/Crea&Esegui/Generale/Directory progetti" e imposta "Directory" su ".".Poi finalmente è stato compilato."It" è il progetto kmap2qmap in Qt 5.11.

Solo i miei 2 centesimi nel caso qualcuno possa trovarli utili.

Ci potrebbero essere molte ragioni in più per l'errore. Ma per me, sulla rimozione degli slot inutilizzati dalla classe il problema è stato risolto.

Ho avuto lo stesso problema. La mia decisione è -. Implementare tutte le funzioni virtuali e tutte le dichiarazioni slot

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top