QtCreator construire des rendements collect2: ld retourné état de la sortie 1

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

  •  18-09-2019
  •  | 
  •  

Question

Alors que la construction de plusieurs projets différents dans QtCreator, j'ai couru à travers l'erreur de génération suivante:

collect2: ld returned 1 exit status

Après avoir changé seulement quelques petites choses (cela ne devrait pas changer quoi que ce soit significatif dans la construction), elle disparaîtra si elle est déjà apparu, ou il apparaîtra si elle est pas là.

Dans mon programme en cours pour un projet scolaire, je suis en train de compiler rock03.cpp. Il est le seul fichier dans la construction, et a la principale méthode (). Je courais juste avec succès, et est retourné à changer l'ordre de quelques if()s, maintenant, je reçois deux avertissements pertinents:

overriding commands for target 'rock03.o'

et

ignoring old commands for target 'rock03.o'

ainsi que l'erreur en question.

Quelqu'un sait pourquoi cela se passerait-il? Je ne peux pas sembler reproduire l'erreur avec une certitude raisonnable, et QtCreator ne se plaint pas quelque chose avant de construire.

Merci

Était-ce utile?

La solution 10

Vérification du volet « Compiler Output » révèle que le fichier .pro a essayé de lier deux fois le même fichier .cpp.

Autres conseils

Si la seule erreur de message est celui-ci au sujet de liaison, la raison peut être que votre programme est toujours en cours et linker ne peut pas accéder au fichier binaire. Assurez-vous que votre application a été arrêté ou tuer si elle est encore en cours d'exécution. QtCreator ne vérifie jamais si l'exécution précédente a été arrêté avant la compilation.

Cela arrive à moi parce que je fais une déclaration dans le fichier d'en-tête, puis supprimez la fonction dans le fichier cpp et j'oublié de supprimer le decleration dans l'en-tête. Par exemple ...

 //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

La sortie du compilateur est vraiment utile si vous êtes juste comme une erreur, mais le premier candidat est sans doute que vous avez encore le programme de sortie ouvert, et il ne peut pas écrire dans le fichier, parce que » vais vous donner une erreur de collect2 solitaire comme ceci

Cette erreur peut également se produire en raison de problèmes avec la liaison, par exemple, vous avez oublié de déclarer des variables statiques à partir du fichier d'en-tête en utilisant la directive « extern ».

Cela se produit lorsque vous ne fermez pas votre application principale (si l'exécutable de sortie est toujours en cours, mais sans aucune fenêtre visible). Un exemple:

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

Cette application se termine bien lorsque vous fermez la fenêtre principale, mais ce code

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

ne ferme pas l'application lorsque vous fermez la boîte de dialogue (au moins pour moi).

Une solution est de créer toujours la fenêtre principale et assurez-vous que vous le fermez.

Dans mon cas, il déclarais la fonction virtuelle claire.

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

Dans mon cas, les autorisations de dossier ont été le problème. Contrôle de la fenêtre « Compile Output » est cruciale pour découvrir exactement ce que le problème est. (QtCreator est à l'opposé de Visual Studio à cet égard, il faut un certain temps pour s'y habituer.) J'ai essayé régler la autorisations correctement, mais après cela ne semble pas fonctionner, à la fin je désactivé construire ombre, puis je suis allé à « Outils / options / construire & Run / général / Projets Répertoire » et réglez « Répertoire » pour « ». Ensuite, il a finalement compilé. "Il" est le projet kmap2qmap dans Qt 5.11.

Juste mes 2 cents quelqu'un en cas pourraient les trouver utiles.

Il pourrait y avoir beaucoup plus de raisons de l'erreur. Mais pour moi, sur la suppression des emplacements non utilisés de la classe le problème a été résolu.

J'ai eu le même problème. Ma résolution est -. Mettre en œuvre toutes les fonctions virtuelles et toutes les déclarations de créneaux horaires

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top