C compile: collect2: error: LD возвратил 1 статус выхода

Я попытался найти эту ошибку в интернете, но все сообщения для C++.

это сообщение:

test1.о: в функции ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference toCreateDictionary' collect2: ошибка: 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

и вот дикт.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;
}

и если вы хочу проверить гашиш.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

может быть, будет проще, если я дам вам файлы здесь?

в любом случае, я буду рад за советы о том, как понять проблему

7 ответов


ваша проблема-опечатка в созданной функцииectionary().Вы должны изменить его на CreateDЯctionary(). collect2: error: LD returned 1 exit status-та же проблема как в C, так и в C++, обычно это означает, что у вас есть неразрешенные символы. В вашем случае это опечатка, о которой я упоминал ранее.


иногда эта ошибка приходила, потому что не удалось скомпилировать в середине любой сборки. Лучший способ попробовать-сделать чистый и снова сделать весь код .


установите этот

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


при компиляции программы необходимо включить dict.c также, например:

gcc -o test1 test1.c dict.c

плюс у вас есть опечатка в dict.определение с CreateDictionary, Он скажет CreateDectionary (e вместо i)


я получил эту проблему и попробовал много способов ее решить. Наконец, оказалось, что make clean и make снова решил. Причина: Я получил исходный код вместе с объектными файлами, скомпилированными ранее со старой версией gcc. Когда моя новая версия gcc хочет связать эти старые объектные файлы, она не может разрешить некоторую функцию там. Со мной несколько раз случается, что распространители исходного кода не убирают перед упаковкой, поэтому make clean спас.


обычно эта проблема возникает, когда мы вызвали функцию, которая не была определена в файле программы, поэтому, чтобы разобраться в этой проблеме, проверьте, вызвали ли вы такую функцию, которая не была определена в файле программы.


  1. перейдите в раздел Дополнительные Системные настройки в свойствах компьютера
  2. нажмите на кнопку Дополнительно
  3. Нажмите для переменной среды
  4. выберите опцию пути
  5. измените параметр пути на папку bin dev c
  6. применить и сохранить его
  7. теперь повторно сохраните код в папке bin в developer c