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
Может быть, будет легче, если я дам вам файлы здесь?
В любом случае, я буду рад за советы о том, как понять проблему.
Ответы
Ответ 1
Ваша проблема - это опечатка в функции CreateD e ctionary(). Вы должны изменить ее на CreateD i ctionary().
collect2: error: ld return 1 статус выхода - та же проблема как на C, так и на С++, обычно это означает, что у вас есть неразрешенные символы. В вашем случае это опечатка, о которой я упоминал ранее.
Ответ 2
установить это
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
Ответ 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