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 to
CreateDictionary ' 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.
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.
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
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.
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.
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.
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.
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
)