Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur de compilation[Qt]

    12 septembre 2018 à 10:52:48

    salut je suis sous linux depuis "recement". jai deja eu afaire a Qt sur windows et la jai une erreur que jai deja eu a voir mais que je ne comprend pas. voici ce que jai comme erreur.

    :-1: erreur : collect2: error: ld returned 1 exit status

    et voici la sortie compilation

    /usr/bin/x86_64-linux-gnu-ld: cannot find -lm
    /usr/bin/x86_64-linux-gnu-ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc_s.so.1 when searching for libgcc_s.so.1
    /usr/bin/x86_64-linux-gnu-ld: cannot find libgcc_s.so.1
    Makefile:261: recipe for target 'test' failed
    /usr/bin/x86_64-linux-gnu-ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc
    /usr/bin/x86_64-linux-gnu-ld: cannot find -lgcc
    collect2: error: ld returned 1 exit status
    make: *** [test] Error 1
    08:25:01: Le processus "/usr/bin/make" s'est terminé avec le code 2.
    Erreur lors de la compilation/déploiement du projet test (kit : Desktop Qt 5.12.0 GCC 64bit)
    The kit Desktop Qt 5.12.0 GCC 64bit has configuration issues which might be the root cause for this problem.
    When executing step "Make"
    08:25:01: Temps écoulé : 00:01.


    please help me!

    • Partager sur Facebook
    • Partager sur Twitter
      12 septembre 2018 à 20:10:20

      Salut,

      Pour être clair : ces messages sont émis par l'éditeur de liens : l'outil qui va regrouper tous les fichiers "objet" (les fichiers qui contiennent le code binaire exécutable générés par le compilateur sur base de tes fichiers *.cpp) en une seule application qui sera utilisable par ton ordinateur.

      Les vraies raisons du problème sont données au lignes 2 et 5 des messages que tu nous présente, à savoir

      sr/bin/x86_64-linux-gnu-ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc_s.so.1 when searching for libgcc_s.so.1

      et

      /usr/bin/x86_64-linux-gnu-ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a when searching for -lgcc

      En gros, ces lignes nous indiquent que, pour une raison ou une autre, les bibliothèques (libgcc_s et libgcc) ont bel et bien été trouvées mais... dans une version incompatible.

      Généralement, c'est ce qui arrive lorsque tu veux utiliser une bibliothèque compilée dans une version "32bits" avec du code compilé en version "64bits" (ou vice versa).

      Il semblerait donc dans le cas présent que "certaines bibliothèques" ne soient présentes qu'en version 32 bits, alors que ton système est configuré pour générer des applications 64 bits. Mais je peux encore me tromper sur ce point ;)

      La solution à ce genre de problème est "simple":

      • soit, tu veilles à installer la "bonne version" des bibliothèque, en rapport avec la version que tu veux créer de ton application
      • soit tu veilles à créer compiler ton code pour... la bonne version des bibliothèques que tu utilises.

      Comme tu sembles travailler sous linux, tu la première solution devrait être "relativement simple" à mettre en oeuvre au travers de ton gestionnaire de paquet : un sudo apt-get install (sous debian like) devrait pouvoir te "sortir d'affaire".

      Mais, si, pour une raison ou une autre, tu ne peux pas ajouter les versions "64bits" des bibliothèques dont tu as besoin, tu n'auras sans doute pas d'autre choix que de créer ... une application "32bits".

      Le gros avantage étant qu'un système linux 64bits peut "tout à fait" faire fonctionner des applications 32 bits, et que tu peux donc te retourner vers la deuxième solution.

      "Tout ce que tu aurais à faire" dans ce cas là serait de forcer le compilateur à générer le code binaire exécutable en version "32bits".  Et cela se fait très facilement en rajoutant l'option "-m32" aux options de compilation ;)

      (bien sur, si j'ai mal interprété les messages et que ton système est -- justement -- prévu pour fonctionner avec des versions 32 bits, alors que les bibliothèques libgcc_s et libgcc ne sont présentes qu'en version 64 bits, il faudra adapter l'option de compilation pour forcer gcc à générer ... du code binaire exécutable dans une version 64 bits.  Cela se fera en remplaçant l'option -m32 par l'option ... -m64 ;) )

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        14 septembre 2018 à 12:04:28

        Merci l'ami pour la réponse très rapide et explicite même si je ne la regarde que maintenant. je dis ça parce que ce n'est pas qu'une réponse résolution. tu m'as carrément ouvert les yeux sur 2,3 choses et maintenant j'ai d'autre questions. mais d'abord je pense que mon kit de compilation est mal configuré.

        J’ai du installer gcc en 64 bit pour résoudre le problème . Je ne savais pas comment m’y prendre pour ne prendre que le libgcc dont il était question.

        Est ce que tu pourrais m'aider une fois de plus?

        Autre choses qui n’est directement lie au sujet : La correction automatique me fait des suggestions en anglais. C’est très gênant parce que j’utilise un clavier anglais(pratique pour coder moins pour converser)

        voila a quoi ressemble maintenant ma sortie comapilation. Je vais jeter un coup d'oeil au tuto sur la configurartion des kit et voir si j'avance avec ca.

        11:07:32: Exécution des étapes pour le projet test...
        11:07:32: Débute : "/usr/bin/make" clean
        /home/ribama/Qt/5.12.0/gcc_64/bin/qmake -o Makefile ../test/test.pro -spec linux-g++-32 CONFIG+=qtquickcompiler
        rm -f moc_predefs.h
        rm -f moc_mainwindow.cpp
        rm -f ui_mainwindow.h
        rm -f main.o mainwindow.o moc_mainwindow.o
        rm -f *~ core *.core
        11:07:33: Le processus "/usr/bin/make" s'est terminé normalement.
        11:07:33: Configuration inchangée, étape qmake sautée.
        11:07:33: Débute : "/usr/bin/make" 
        /home/ribama/Qt/5.12.0/gcc_64/bin/uic ../test/mainwindow.ui -o ui_mainwindow.h
        g++ -c -m32 -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../test -I. -I../Qt/5.12.0/gcc_64/include -I../Qt/5.12.0/gcc_64/include/QtWidgets -I../Qt/5.12.0/gcc_64/include/QtGui -I../Qt/5.12.0/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I. -I../Qt/5.12.0/gcc_64/mkspecs/linux-g++-32 -o main.o ../test/main.cpp
        In file included from ../Qt/5.12.0/gcc_64/include/QtCore/qglobal.h:45:0,
                         from ../Qt/5.12.0/gcc_64/include/QtGui/qtguiglobal.h:43,
                         from ../Qt/5.12.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h:43,
                         from ../Qt/5.12.0/gcc_64/include/QtWidgets/qmainwindow.h:43,
                         from ../Qt/5.12.0/gcc_64/include/QtWidgets/QMainWindow:1,
                         from ../test/mainwindow.h:4,
                         from ../test/main.cpp:1:
        /usr/include/c++/7/type_traits:38:10: fatal error: bits/c++config.h: No such file or directory
         #include <bits/c++config.h>
                  ^~~~~~~~~~~~~~~~~~
        compilation terminated.
        Makefile:959: recipe for target 'main.o' failed
        make: *** [main.o] Error 1
        11:07:34: Le processus "/usr/bin/make" s'est terminé avec le code 2.
        Erreur lors de la compilation/déploiement du projet test (kit : Desktop Qt 5.12.0 GCC 64bit)
        The kit Desktop Qt 5.12.0 GCC 64bit has configuration issues which might be the root cause for this problem.
        When executing step "Make"
        11:07:34: Temps écoulé : 00:02

         Je me suis dis  a un moment que j'allais juste reinstaller avec les configurations actuelles et que l'insalateur ferait les choses en bonne et du forme mais finalement je pense ca va juste m'eloigner de mon but a savoir poceder une bonne maitrise de l'outil aussi bien en tant que simple utilisateur que dans la comprehension et l'optimisation de ce dernier. Tu me le dis si je dis des conneries

        -
        Edité par RibamaMougnol 14 septembre 2018 à 12:19:24

        • Partager sur Facebook
        • Partager sur Twitter

        Erreur de compilation[Qt]

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown