web-dev-qa-db-ja.com

Cコンパイル:collect2:エラー:ldが1つの終了ステータスを返しました

私はそのバグをオンラインで検索しようとしましたが、すべての投稿はC++用です。

これはメッセージです:

test1.o:関数ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference toCreateDictionary 'collect2で:エラー: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

ここにファイルを入れておけばもっと簡単になるでしょうか?

とにかく、私は問題を理解する方法のヒントを喜んでいます

14
JohnnyF

問題は、関数CreateD e ctionary()のタイプミスです。これをCreateD i ctionary()に変更する必要があります。 collect2:エラー:ldが1つの終了ステータスを返しました。これは、CとC++の両方で同じ問題です。通常、未解決のシンボルがあることを意味します。あなたの場合は、前述したタイプミスです。

13
SVN

これをインストールする

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

2
iHad 169

ビルドの途中でコンパイルに失敗したために、このエラーが発生することがありました。試す最善の方法は、make cleanを実行し、コード全体を再度作成することです。

1
yashvardhan

通常、この問題は、プログラムファイルで定義されていない関数を呼び出したときに発生したため、この問題を整理するには、プログラムファイルで定義されていない関数を呼び出したかどうかを確認します。

0
user7878441

Dev C++を使用している場合は、.exeまたはプログラムが既に実行されていることを意味し、再度実行しようとしています。

0
Ajinkya Khandar

プログラムをコンパイルするときは、dict.cも含める必要があります。例:

gcc -o test1 test1.c dict.c

さらに、dict.cにはCreateDictionaryの定義ミスがあり、CreateDectionaryeの代わりにi)と表示されます。

0