C compile: collect2: error: ld returned 1 exit status

Próbowałem poszukać tego błędu w Internecie, ale wszystkie posty są dla C++.

Oto wiadomość:

Test1.o: in function ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference toCreateDictionary' collect2: error: ld returned 1 exit status make: * * * [test1] Error 1

Super prosty kod i nie rozumiem w czym 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;
...

Teraz jest to nagłówek dict.h

#ifndef _DICT_H_
#define _DICT_H_

#include "hash.h"

pHash CreateDictionary();
...

#endif

A oto 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;
}
I jeśli chcesz sprawdzić 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

Może będzie łatwiej, jeśli dam ci te akta?

W jakikolwiek sposób, będę szczęśliwy za wskazówki, jak zrozumieć problem

Author: mtb, 2014-12-21

7 answers

Twoim problemem jest literówka w funkcji utworzoneje C ().Należy zmienić go na CreateDictionary (). collect2: error: LD returned 1 exit status to ten sam problem zarówno w C jak i C++, zwykle oznacza to, że masz nierozwiązane symbole. W Twoim przypadku jest literówka, o której wspomniałem wcześniej.

 13
Author: SVN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-21 20:15:49

Czasami ten błąd pojawiał się, ponieważ nie udało się skompilować w środku jakiejkolwiek kompilacji. Najlepszym sposobem na wypróbowanie jest wykonanie make clean i ponownie wykonanie całego kodu .

 1
Author: yashvardhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 11:51:30

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

 1
Author: iHad 169,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 16:56:19

Podczas kompilacji programu, musisz dołączyć dict.c, np.:

gcc -o test1 test1.c dict.c

No i masz literówkę w dict.C definicja CreateDictionary, mówi CreateDectionary (e zamiast i)
 0
Author: Innocent Bystander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-21 19:52:37

Mam ten problem i próbowałem go rozwiązać na wiele sposobów. W końcu okazało się, że make clean i make ponownie to rozwiązały. Powodem jest: Otrzymałem kod źródłowy wraz z plikami obiektowymi skompilowanymi wcześniej ze starą wersją gcc. Kiedy moja nowsza wersja gcc chce połączyć te stare pliki obiektowe, nie może tam rozwiązać jakiejś funkcji. Zdarza mi się kilka razy, że dystrybutorzy kodu źródłowego nie sprzątają przed pakowaniem, więc make clean uratowali dzień.

 0
Author: biocyberman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-26 12:59:09

Ogólnie ten problem wystąpił, gdy wywołaliśmy funkcję, która nie została zdefiniowana w pliku programu, więc aby rozwiązać ten problem sprawdź, czy wywołałeś taką funkcję, która nie została zdefiniowana w pliku programu.

 0
Author: user7878441,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 11:48:25
  1. Przejdź do zaawansowanych ustawień systemowych we właściwościach komputera
  2. Kliknij na Zaawansowane
  3. Kliknij na zmienną środowiskową
  4. Wybierz opcję ścieżki
  5. Zmień opcję ścieżka do folderu bin dev C
  6. Apply and save it
  7. Teraz zapisz kod w folderze bin w programiście c
 -2
Author: Kashyap Rj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-22 02:56:14