Подтвердить что ты не робот

C компиляция: collect2: ошибка: ld возвращен 1 статус выхода

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

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

test1.o: В функции ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference to CreateDictionary ' collect2: error: ld возвращен 1 статус выхода make: *** [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;
}

и если вы хотите проверить 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

Может быть, будет легче, если я дам вам файлы здесь?

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

4b9b3361

Ответ 1

Ваша проблема - это опечатка в функции CreateD e ctionary(). Вы должны изменить ее на CreateD i ctionary().  collect2: error: ld return 1 статус выхода - та же проблема как на C, так и на С++, обычно это означает, что у вас есть неразрешенные символы. В вашем случае это опечатка, о которой я упоминал ранее.

Ответ 3

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

Ответ 4

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

Ответ 5

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

gcc -o test1 test1.c dict.c

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

Ответ 6

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

Ответ 7

Если вы используете Dev C++, то ваш .exe или означает, что ваша программа уже запущена, и вы пытаетесь запустить ее снова.

Ответ 8

  • Перейдите в раздел "Дополнительные параметры системы" в свойствах компьютера.
  • Нажмите "Дополнительно"
  • Нажмите для переменной окружения
  • Выберите вариант пути
  • Измените параметр пути на папку bin dev c
  • Применить и сохранить его
  • Теперь сохраните код в папке bin в разработчике c