web-dev-qa-db-fra.com

C compiler: collect2: error: ld a renvoyé 1 état de sortie

J'ai essayé de rechercher ce bogue en ligne mais tous les articles sont pour C++.

C'est le message:

test1.o: Dans la fonction ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference toCreateDictionary ' collect2: erreur: ld a renvoyé 1 état de sortie make: *** [test1] Erreur 1

code super simple et ne peut pas comprendre quel est le problème

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dict.h"
#include "hash.h"


pHash ReadDictionary() {
    /* This function reads a dictionary line by line from the standard input. */
    pHash dictionary;
    char entryLine[100] = "";
    char *Word, *translation;

    dictionary = CreateDictionary();
    while (scanf("%s", entryLine) == 1) { // Not EOF
        Word = strtok(entryLine, "=");
        translation = strtok(NULL, "=");
        AddTranslation(dictionary, Word, translation);
    }
    return dictionary;
}

int main() {
    pHash dicti;
...

maintenant c'est l'en-tête dict.h

#ifndef _DICT_H_
#define _DICT_H_

#include "hash.h"

pHash CreateDictionary();
...

#endif

et voici le dict.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hash.h"
#include "dict.h"


pHash CreateDectionary()
{
    pHash newDict;
    newDict= HashCreate(650, HashWord, PrintEntry, CompareWords, GetEntryKey, DestroyEntry);
    return newDict;
}

et si vous voulez vérifier hash.h

#ifndef _HASH_H_
#define _HASH_H_

//type defintions//
typedef enum {FAIL = 0, SUCCESS} Result;
typedef enum {SAME = 0, DIFFERENT} CompResult;

typedef struct _Hash Hash, *pHash;

typedef void* pElement;
typedef void* pKey;

//function types//
typedef int (*HashFunc) (pKey key, int size);
typedef Result (*PrintFunc) (pElement element);
typedef CompResult (*CompareFunc) (pKey key1, pKey key2);
typedef pKey (*GetKeyFunc) (pElement element);
typedef void (*DestroyFunc)(pElement element);
...

//interface functions//

#endif

Peut-être que ce sera plus facile si je vous donne les fichiers ici?

De toute façon, je serai heureux de vous donner des conseils pour comprendre le problème.

13
JohnnyF

Votre problème est la faute de frappe dans la fonction CreateD e ctionary (). Vous devriez le changer en CreateD i ctionary (). collect2: erreur: ld renvoyé 1 statut de sortie est le même problème en C et C++, cela signifie généralement que vous avez des symboles non résolus. Dans votre cas, c'est la faute de frappe que j'ai mentionnée auparavant.

13
SVN

installez ceci

Sudo apt install libgl-dev libglu-dev libglib2.0-dev libsm-dev libxrender-dev libfontconfig1-dev libxext-dev

http://www.qtcentre.org/threads/69625-collect2-error-ld-returned-1-exit-status

2
iHad 169

J'ai eu ce problème et j'ai essayé plusieurs façons de le résoudre. Finalement, il s'est avéré que make clean et make l'ont à nouveau résolu. La raison en est: J'ai le code source ainsi que les fichiers objet compilés précédemment avec une ancienne version de gcc. Lorsque ma version plus récente de gcc souhaite lier ces anciens fichiers objets, elle ne peut résoudre aucune fonction. Il m'est arrivé plusieurs fois que les distributeurs de code source ne nettoient pas avant l'emballage, c'est pourquoi un make clean a sauvé la journée.

1
biocyberman

parfois, cette erreur est survenue parce que la compilation n’a pas été compilée de la manière la plus médiocre .. Le meilleur moyen d’essayer est de faire en sorte de nettoyer et de rendre le code complet. 

1
yashvardhan

généralement ce problème est survenu lorsque nous avons appelé une fonction qui n’a pas été définie dans le fichier de programme. Pour résoudre ce problème, vérifiez si vous avez appelé une telle fonction qui n’a pas été définie dans le fichier de programme. 

0
user7878441

Si vous utilisez Dev C++, alors votre .exe signifie que votre programme est déjà en cours d'exécution et que vous essayez de l'exécuter à nouveau.

0
Ajinkya Khandar

Lors de la compilation de votre programme, vous devez également inclure dict.c, par exemple:

gcc -o test1 test1.c dict.c

De plus, vous avez une faute de frappe dans la définition de la variable dict.c de CreateDictionary, elle dit CreateDectionary (e au lieu de i)

0
Innocent Bystander