wake-up-neo.com

C compile: collect2: error: ld gab 1 Exit-Status zurück

Ich habe versucht, online nach diesem Fehler zu suchen, aber alle Beiträge beziehen sich auf C++.

Dies ist die Nachricht:

test1.o: In Funktion ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference toCreateDictionary ' collect2: Fehler: ld gab 1 Exit-Status zurück make: *** [test1] Fehler 1

super einfacher Code und kann nicht verstehen, was das Problem ist

#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;
...

das ist jetzt die Kopfzeile dict.h

#ifndef _DICT_H_
#define _DICT_H_

#include "hash.h"

pHash CreateDictionary();
...

#endif

und hier ist das 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;
}

und wenn du hash.h überprüfen willst

#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

Vielleicht wird es einfacher, wenn ich Ihnen die Dateien hier gebe?

In jedem Fall freue ich mich über Tipps, wie man das Problem verstehen kann

13
JohnnyF

Ihr Problem ist der Tippfehler in der Funktion CreateD e ctionary (). Ändern Sie ihn in CreateD i ctionary (). collect2: Fehler: ld zurückgegeben 1 Exit-Status ist das gleiche Problem in C und C++, in der Regel bedeutet dies, dass Sie nicht aufgelöste Symbole haben. In Ihrem Fall ist der Tipp, den ich zuvor erwähnt habe.

13
SVN

installiere das

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

Ich habe dieses Problem gefunden und versucht, es zu lösen. Schließlich stellte sich heraus, dass make clean und make es wieder gelöst haben. Der Grund ist: Ich habe den Quellcode zusammen mit Objektdateien erhalten, die zuvor mit einer alten gcc-Version kompiliert wurden. Wenn meine neuere gcc-Version diese alten Objektdateien verknüpfen möchte, kann sie dort keine Funktion auflösen. Mir kommt mehrmals vor, dass die Quellcode-Distributoren vor dem Einpacken nicht aufräumen, so dass ein make clean den Tag gerettet hat.

1
biocyberman

manchmal trat dieser Fehler auf, da der Build in der Regel nicht kompiliert werden konnte. Am besten versuchen Sie es mit make clean und dem gesamten Code. 

1
yashvardhan

im Allgemeinen trat dieses Problem auf, wenn wir eine Funktion aufgerufen haben, die nicht in der Programmdatei definiert wurde. Um dieses Problem zu beheben, überprüfen Sie, ob Sie eine solche Funktion aufgerufen haben, die nicht in der Programmdatei definiert wurde. 

0
user7878441

Wenn Sie Dev C++ verwenden, wird Ihr .exe oder Ihr Programm bereits ausgeführt und Sie versuchen es erneut auszuführen.

0
Ajinkya Khandar

Wenn Sie Ihr Programm kompilieren, müssen Sie auch dict.c einbinden, zB:

gcc -o test1 test1.c dict.c

Außerdem gibt es einen Tippfehler in dict.c der Definition von CreateDictionary, heißt es CreateDectionary (e anstelle von i)

0