I tried to search for that bug online but all the posts are for C++.
This is the message:
test1.o: In function `ReadDictionary':
/home/johnny/Desktop/haggai/test1.c:13: undefined reference to `CreateDictionary'
collect2: error: ld returned 1 exit status
make: *** [test1] Error 1
super simple code and can't understand what's the problem
#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;
...
now this is the header dict.h
#ifndef _DICT_H_
#define _DICT_H_
#include "hash.h"
pHash CreateDictionary();
...
#endif
and here is the 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;
}
and if you wanna check 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
Maybe it will be easier if I give you the files here?
Any way, I will be happy for tips on how to understand the problem
This question is related to
c
compilation
linker
generally this problem occurred when we have called a function which has not been define in the program file, so to sort out this problem check whether have you called such function which has not been define in the program file.
If you are using Dev C++ then your .exe
or mean to say your program already running and you are trying to run it again.
When compiling your program, you need to include dict.c as well, eg:
gcc -o test1 test1.c dict.c
Plus you have a typo in dict.c definition of CreateDictionary
, it says CreateDectionary
(e
instead of i
)
install this
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
This issue appears when you have a running console at the time you try to run other (or the same) program.
I had this problem during executing a program on Sublime Text while I had another one running on DevC++ already.
I got this problem, and tried many ways to solve it. Finally, it turned out that make clean
and make
again solved it. The reason is:
I got the source code together with object files compiled previously with an old gcc version. When my newer gcc version wants to link that old object files, it can't resolve some function in there. It happens to me several times that the source code distributors do not clean up before packing, so a make clean
saved the day.
sometimes this error came beacause failed to compile in middlest of any build. The best way to try is by doing make clean and again make the whole code .
Source: Stackoverflow.com