c - सी संकलन: संग्रह 2: त्रुटि: एलडी ने 1 बाहर निकलने की स्थिति लौटाई




compilation linker (4)

मैंने उस बग को ऑनलाइन खोज करने की कोशिश की लेकिन सभी पोस्ट सी ++ के लिए हैं

यह संदेश है:

test1.o: फ़ंक्शन में ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference to ' संग्रह 2: त्रुटि: ld ने 1 बाहर निकलें स्थिति बना दिया है: *** [test1] त्रुटि 1

सुपर सरल कोड और समझा नहीं जा सकता कि समस्या क्या है

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

अब यह हैडर dict.h है

#ifndef _DICT_H_
#define _DICT_H_

#include "hash.h"

pHash CreateDictionary();
...

#endif

और यहाँ 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;
}

और यदि आप हैश एच की जांच करना चाहते हैं

#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

शायद अगर मैं आपको फाइलों को यहां देता है तो क्या यह आसान होगा?

किसी भी तरह से, मैं इस समस्या को समझने की युक्तियों के लिए खुश रहूंगा


आपकी समस्या फ़ंक्शंस CreateD ctionary () में टाइपो है। आपको इसे CreateD i ctionary () में बदलना चाहिए। संग्रह 2: त्रुटि: एलडी 1 से बाहर निकलने की स्थिति सी और सी ++ दोनों में एक ही समस्या है, आमतौर पर इसका मतलब है कि आपके पास अनसुलझे प्रतीकों हैं आपके मामले में वह टाइपो है जिसका मैंने पहले उल्लेख किया था।


जब आपका प्रोग्राम संकलित हो, आपको dict.c को भी शामिल करना होगा, जैसे:

gcc -o test1 test1.c dict.c

इसके अलावा आपके पास CreateDictionary की dict.c परिभाषा में कोई टाइपो है, यह कहता है कि CreateDectionary ( e बजाय i )


कभी-कभी इस त्रुटि के कारण किसी बिल्ड के मिडलस्ट में संकलन करने में विफल रहा। कोशिश करने का सबसे अच्छा तरीका है साफ करने और फिर पूरे कोड को बनाने के लिए।


आम तौर पर यह समस्या तब हुई जब हमने एक फ़ंक्शन बुलाया जो प्रोग्राम फ़ाइल में परिभाषित नहीं हुआ है, इस समस्या को हल करने के लिए यह जांचें कि क्या आपने ऐसी फ़ंक्शन बुलाया है, जो कि प्रोग्राम फ़ाइल में परिभाषित नहीं किया गया है।





linker