Partage
  • Partager sur Facebook
  • Partager sur Twitter

compilation C++ code block

error : ld returned exited status

1 mars 2019 à 0:09:49

j'ai depuis  2 jours déjà une érreur de compilation du genre error : ld returned 1 exited status
ce si advient quand j'ajoute aux directives du préprocesseur l'inclusion de matrice.h tel sur la photo
j'ai pensé que c'est un problème du linkeur mais rien
  • Partager sur Facebook
  • Partager sur Twitter
#👌
1 mars 2019 à 1:13:31

Lu'

Quel est le contenu de Matrices.cpp (a insérer avec le bouton </>)

L'erreur retournée signifie un problème rencontré lors de la séquence de linkage.

Si tu retire le deuxième cout, l'erreur persiste ?

De plus, on n'utilise pas :

using namespace std;
  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2019 à 2:14:41


matrice est en fait un espace de nom qui comporte plusieurs classes
même quand je retire le deuxième cout l'erreur persiste

j'ai aussi tout modifié au niveau du linkeur; j'utilise aussi un autre fichier d'un autre pojet pour le controle de saisie.

lui son dossier je l'ai ajouté aux options de recherche de dossier du linkeur et il n'a pas de problème pour tant il comporte aussi des espaces de nom

quand je met ceci l'erreur change on me dit undefined references to auto_name_matrix

using namespace Matrices;
using namespace std;

-
Edité par Vincent Angel 1 mars 2019 à 2:21:11

  • Partager sur Facebook
  • Partager sur Twitter
#👌
1 mars 2019 à 7:45:31

Salut,

Quand tu obtiens l'erreur "ld returned 1 exited status", le compilo te dit d'autres choses, je pense qu'il te manque des onglets dans la barre du bas. Avec cette erreur ce serait bien plus simple de te répondre. L'onglet se nomme "build log"

L'erreur peut être du genre "variable initialisé 2 fois" ou quelque chose comme ça.

Est-ce que c'est le seul fichier de ton projet?

-
Edité par Overeath 1 mars 2019 à 7:47:09

  • Partager sur Facebook
  • Partager sur Twitter
MsgBox "Ensemble"  &  chr(10)  &  chr(10) & "développons"
1 mars 2019 à 14:46:01

Salut,

De manière générale, lorsque la compilation échoue avec un message du genre de "ld returned 1 exit status", cela signifie que c'est l'éditeur de liens qui n'a pas pu mener son taf à terme.

Il faut en effet savoir que la compilation se fait en (au moins) deux étapes bien précises:

  • la compilation proprement dite, qui va générer des "fichiers objets" contenant le code binaire qui pourra être exécuté par le processeur su base de tous les fichiers *.cpp de ton projet
  • l'édition de liens, qui va regrouper tous les fichiers objets générés pendant la première étape, quelques fichiers objets "externes" (fournis par des bibliothèques externes) pour créer l'exécutable final.

Quand l'éditeur de liens renvoie un status final différent de 0, il indique (comme n'importe quel programme, d'ailleurs) au système d'exploitation qu'il y a eu un problème qui l'a empêché  d'aller jusqu'au bout de son travail.

Le principal problème auquel l'éditeur de liens peut être confronté, c'est qu'il ait été dans l'impossibilité de trouver l'implémentation d'une fonction particulière lorsqu'il a voulu faire pointer l'appel à cette fonction vers le code (binaire exécutable) correspondant.

Généralement, avant d'arrêter brutalement son taf, l'éditeur de liens va émettre un message du genre de "error : undefined reference to '<nom d'une fonction particulière>'".

Pour résoudre le problème, il faut donc ... déterminer la raison pour laquelle l'éditeur de liens n'a pas pu trouver le code binaire exécutable correspondant à cette fonction.  Et pour cela, il faut commencer par déterminer quelle est la fonction qui a été "foutre le bordel". Le fait d'avoir le nom de la fonction qu'il indique aidera pas mal pour cela ;)

A partir de ce nom, il y a deux solutions possibles:

Soit la fonction en question est une des fonctions fournies spécifiquement par ton projet, et nous avons alors trois raison possibles au fait que l'éditeur de liens ne l'aient pas trouvée:

  • Tu as peut-être déclaré la fonction, mais oublié d'en fournir l'implémentation --> fournis l'implémentation manquante, tu résoudra ton problème
  • le fichier .cpp qui contient l'implémentation de la fonction en question n'a pas été compilé, sans doute parce que le fichier en question n'est pas pris en compte dans le projet --> ajouter le fichier au projet devrait résoudre le problème
  • le fichier objet généré à partir d'un fichier d'implémentation (.cpp) n'a pas été pris en compte par l'éditeur de liens (cette erreur ne devrait normalement pas survenir lorsqu'on travaille avec un EDI) --> ajouter le fichier objet à la liste des fichiers utilisés par l'éditeur devrait résoudre le problème.
  • tu utilises des fonctions (de classes) template, et tu as séparé l'implémentation de ces fonctions de leur déclaration.  Le compilateur n'avait donc pas le code permettant de générer le code binaire exécutable correspondant pour un type particulier --> ==>cette entrée de la FAQ<== de developpez devrait te fournir les réponses à tes questions

Soit la fonction en question est fournie par une bibliothèque externe (ex: SFML, boost, irrlicht, Qt, ...).

Ce problème est fait que l'éditeur de liens ne va chercher que dans les bibliothèques externes qu'on lui a explicitement indiquées, et qu'il n'ira chercher les bibliothèques en question que dans les dossiers qui font partie d'une liste bien spécifique.

S'il ne trouve pas une fonction particulière issue d'une bibliothèque externe, c'est sans doute parce qu'on aura oublié de lui indiquer la bibliothèque bien particulière qui la fourni. --> il faudra corriger les options de compilation de ton projet pour résoudre le problème

Si tu as indiqué la bibliothèque qui est sensée fournir la fonction indiquée, il se peut que l'éditeur de liens n'ait -- tout simplement -- pas trouvé la bibliothèque en question dans les dossiers dans il est allé chercher après. 

Cela arrive le plus souvent lorsque la bibliothèque en question n'est pas installée à "sa place habituelle".  Il faudra alors ajouter le dossier dans lequel l'éditeur de liens devra aller chercher les bibliothèques externes à la liste des dossiers qu'il utilise.  Cela se fait également au niveau des options de compilation de ton projet ;)

  • 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
15 mars 2019 à 0:49:01

Tanks
j'ai suivi tes conseils et l'erreur a changé
au lieu de linker le fichier j'ai plus tot créé un lien symbolique de Matrice/ vers Graphes/ et j'ai ajouter les liens au projet graphe
l'erreur a changé et j'ai réellement vu le problème

en Fait dans matrice j'utilisait des vecteurs de vecteur mais je les déclarait

vector<vector<double>>

au lieu de

vector<vector<double> >

Mais la question que je me pose toujours c'est pourquoi dans Matrice tout marchait correct avec cette l'erreur ?:ninja:


-
Edité par Vincent Angel 15 mars 2019 à 0:49:47

  • Partager sur Facebook
  • Partager sur Twitter
#👌
15 mars 2019 à 11:15:02

Heu, il y a encore des compilateurs qui gèrent mal les doubles chevrons (>>) ???

Vous utilisez quoi comme antiquité ???

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
15 mars 2019 à 21:30:51

Vincent Angel a écrit:


en Fait dans matrice j'utilisait des vecteurs de vecteur mais je les déclarait

vector<vector<double>>

au lieu de

vector<vector<double> >


bacelar a écrit:

Heu, il y a encore des compilateurs qui gèrent mal les doubles chevrons (>>) ???


Assure toi d'utiliser au minimum la norme C++11 " ̶-̶l̶s̶t̶d̶c̶+̶+̶1̶1̶"

Edit:
Mon erreur (Merci koala): -std=c++11

-
Edité par Maeiky 16 mars 2019 à 0:32:09

  • Partager sur Facebook
  • Partager sur Twitter

GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

15 mars 2019 à 22:25:36

Maeiky a écrit:


Assure toi d'utiliser au minimum la norme C++11 "-lstdc++11"

Non, pas -lstdc++11, mais presque: -std=c++11 (ou c++14 ou mieux encore c++17), ca fera l'affaire :D

NOTA :

1- Sous CodeBlocks, cela se fait en cochant l'option "Have g++ to follow C++XY ISO C++ standard" (en remplacant XY par 11, 14 ou 17, selon les besoins), qui se trouve au travers du menu "Project->Build options ...".

2- L'idéal, c'est de quand même penser très régulièrement à mettre le compilateur utilisé par Code::Blcoks à jour car, à l'heure actuelle, MinGW-w64 fournit par défaut la version 8.x.y de Gcc, qui utilise par défaut la dernière norme en cours (C++17 au moment d'écrire ces lignes) !!!

Il y a toute une discussion qui indique, sur ce forum même, comment s'y prendre ;)

3- Dans l'idéal, il serait aussi pas mal de se tourner vers les "Nightly builds" de Code::Block.

Bien que son développement soit toujours (plus ou moins) actif, la sortie de nouvelles versions se fait régulièrement attendre très (trop) longtemps.

Si vous prenez la peine de faire un tour sur le forum dédié à Code::Blocks, vous y verrez une sections nommée "Nightly builds", dans laquelle chaque compilation réussie suite à des modifications (plus ou moins) mineure est annoncée, et une archive contenant la "nouvelle version de développement" de Code::Blocks fournie.

Il suffit de télécharger l'archive de cette compilation de nuit et d'en extraire le contenu de manière à ce qu'il remplace le contenu de votre dossier d'installation de Code::Blocks pour pouvoir en profiter.

Ce n'est pas forcément indispensable, mais cela peut s'avérer dans quelques cas bien utile ;)

  • 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
17 mars 2019 à 10:11:14

A l'époque où j'ai écrit le petit tuto pour changer le compilateur utilisé par Code::Blocks, je considérais déjà que C::B était vieillot et dépassé, je constate (avec une certaine déception) que mon tuto est toujours d'actualité (Note à moi même, penser à mettre à jour les liens sur les compilos un de ces quatres), ce qui prouve bien que C::B est vraiment à la ramasse. Tu as des IDE comme QtCreator (Contrairement à une idée reçue QtCreator n'est pas Qt only, il fait merveille, même sur des projets qui n'utilisent pas Qt (CMake power!), si j'envisageais de proposer un tuto sur C++, c'est probablement lui que je choisirais de présenter, et sur lui que je développerais mes exemples...) ou Visual Studio qui sont a des années lumières de C::B en terme de fonctionnalités et de confort d'utilisation et qui sont livrés avec des compilateurs nettement plus modernes.

-
Edité par int21h 17 mars 2019 à 10:27:25

  • Partager sur Facebook
  • Partager sur Twitter
Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
4 septembre 2023 à 14:51:36 - Message modéré pour le motif suivant : Message complètement hors sujet


4 septembre 2023 à 14:55:13

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération
  • Partager sur Facebook
  • Partager sur Twitter